存储过程中执行 sp_addlinkedserver ?
CREATE PROCEDURE GetDepartMentData121
AS
--增加连接服务器
EXEC sp_addlinkedserver
'Remote_Server',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=DEV-DC ;UID=sa ;PWD=sqladmin;'
EXEC sp_addlinkedsrvlogin 'Remote_Server','false' ,NULL,'sa','sqladmin'
GO
--这里执行数据导入操作
exec sp_droplinkedsrvlogin 'Remote_Server',null
EXEC sp_dropserver 'Remote_Server'
在GO这里出错(语法错误),如果删除GO的话连接服务器没有添加,不能执行数据导入的操作
问题点数:100、回复次数:13Top
1 楼liuruhong(蓝色街灯)回复于 2003-09-02 11:05:26 得分 15
exec sp_addlinkedserver @ServerName,N'SQL Server'
EXEC sp_addlinkedsrvlogin @ServerName, 'false', NULL, @UserName, @Password
你最好使用N'string'那样的形式,毕竟采用unicode的方式会好一点
这个方面我做过,应该还算了解Top
2 楼liuruhong(蓝色街灯)回复于 2003-09-02 11:06:25 得分 10
exec sp_addlinkedserver @ServerName,N'SQL Server'
EXEC sp_addlinkedsrvlogin @ServerName, 'false', NULL, @UserName, @Password
你最好使用N'string'那样的形式,毕竟采用unicode的方式会好一点
这个方面我做过,应该还算了解Top
3 楼tj_dns(愉快的登山者)回复于 2003-09-02 11:10:12 得分 10
USE master
GO
EXEC sp_addlinkedserver
'server2',
N'SQL Server'
GO
EXEC sp_addlinkedsrvlogin 'server2', 'false', NULL, 'Sa', 'pass'
GO
SELECT * FROM server2.tools.dbo.tb_ciq
Top
4 楼tj_dns(愉快的登山者)回复于 2003-09-02 11:18:11 得分 10
USE master
GO
EXEC sp_addlinkedserver
'server2',
N'SQL Server'
GO
EXEC sp_addlinkedsrvlogin 'server2', 'false', NULL, 'Sa', 'pass'
GO
SELECT * FROM server2.tools.dbo.tb_ciq
Top
5 楼liuyun2003(流云(老老实实做人,认认真真还贷))回复于 2003-09-02 11:19:04 得分 20
GO是一个批处理结束的标志。所以,你在那里加上这个以后,就代表这个存储过程结束了。这样就会出现问题了。如果不加GO的话,就没有提交,所以,没有建立链接服务器。你这样处理一下看看,把
sp_addlinkedserver
'Remote_Server',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=DEV-DC ;UID=sa ;PWD=sqladmin;'
GO
转换成一个长的字符串,然后在EXEC里执行。如果还有问题,你就只能手工建立链接服务器了。Top
6 楼txlicenhe(马可)回复于 2003-09-02 11:27:04 得分 5
1:服务器操作
EXEC sp_addlinkedserver
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器
exec sp_addlinkedsrvlogin 'test','false','sa','sa',''Top
7 楼zjcxc(邹建)回复于 2003-09-02 11:52:17 得分 5
你是要将数据处理完成后删除链接服务器吧?
那就不要加上go
go是代表一个批处理结束,如果加上它,则表明你的存储过程只包含
CREATE PROCEDURE GetDepartMentData121
AS
--增加连接服务器
EXEC sp_addlinkedserver
'Remote_Server',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=DEV-DC ;UID=sa ;PWD=sqladmin;'
EXEC sp_addlinkedsrvlogin 'Remote_Server','false' ,NULL,'sa','sqladmin'
GO
----------------------------------------------------------------
后面的部分已经不属于存储过程
--这里执行数据导入操作
exec sp_droplinkedsrvlogin 'Remote_Server',null
EXEC sp_dropserver 'Remote_Server'Top
8 楼zjcxc(邹建)回复于 2003-09-02 11:53:43 得分 5
如果你在存储过程设计器中书写,那就肯定会错,因为go只能在查询分析器中使用,代表一个批处理结束.
按照我理解的意思,你应该删除goTop
9 楼leimin(黄山光明顶)回复于 2003-09-02 12:36:42 得分 5
EXEC sp_addlinkedserver
'Remote_Server',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=DEV-DC ;UID=sa ;PWD=sqladmin;'
EXEC sp_addlinkedsrvlogin 'Remote_Server','false' ,NULL,'sa','sqladmin'
最好不要在stored procedure中写,你可以写一个*.SQL的脚本,然后通过ISQL来执行。Top
10 楼flysnowjava(大象~大象~鼻子长 )回复于 2003-09-02 14:33:47 得分 0
20多个远程的数据库服务器每个里面4个表的数据要
集中到总部服务器上
总部服务器上表中存放着每个机器名和用户名密码
我想循环执行一个存储过程把数据导入总部的机器
做个JOB存储过程要每个周一自动运行一下Top
11 楼flysnowjava(大象~大象~鼻子长 )回复于 2003-09-02 14:34:41 得分 0
在线等待,立即给分!!!Top
12 楼flysnowjava(大象~大象~鼻子长 )回复于 2003-09-02 15:02:38 得分 0
在线等待,立即给分Top
13 楼zjcxc(邹建)回复于 2003-09-02 16:39:43 得分 5
创建下面的存储过程进行数据处理:
create proc p_merg
as
declare @srvname varchar(250),@username varchar(250),@pwd varchar(100)
--定义游标,取得各远程服务器的信息
declare #tb cursor for select 服务器名,用户名,密码 from 保存远程信息的表
open #tb
fetch next from #tb into @srvname,@username,@pwd
while @@fetch_status=0
begin
--创建链接服务器
exec sp_addlinkedserver 'Link_server','','SQLOLEDB',@srvname
exec sp_addlinkedsrvlogin 'Link_server','false',null,@username,@pwd
--数据导入处理,根据你的情况写
insert into 表 select * from Link_server.数据库名..表名
--数据处理完成后删除链接服务器
exec sp_dropserver 'Link_server','droplogins'
fetch next from #tb into @srvname,@username,@pwd
end
close #tb
deallocate #tb
go
创建一个JOB,设置每周一执行,JOB的执行语句如下:exec p_merg
Top
14 楼leimin(黄山光明顶)回复于 2003-09-02 18:33:29 得分 10
http://expert.csdn.net/Expert/TopicView1.asp?id=2215343Top
15 楼flysnowjava(大象~大象~鼻子长 )回复于 2003-09-03 11:55:18 得分 0
结贴Top




