求救!! 存储过程里访问远程服务器的问题
怎样在存储过程里登录远程服务器呢?比如下面的存储过程:
CREATE PROCEDURE GetData
@id int
AS
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','172.18.1.177'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa',''
Select * from srv_lnk.TestDB.[dbo].TestTable where [id] = @id
exec sp_dropserver 'srv_lnk','droplogins'
GO
可是总是说srv_lnk找不到,如果在调用sp_addlinkedsrvlogin以后运行go的话,又不能访问参数@ID了,我该怎么办啊?
问题点数:100、回复次数:6Top
1 楼CrazyFor(冬眠的鼹鼠)回复于 2003-12-01 17:48:41 得分 0
建立链接服务器
EXEC sp_addlinkedserver
'别名',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
GO
select col1,col2,col3.... from 别名...tableTop
2 楼txlicenhe(马可)回复于 2003-12-01 18:51:57 得分 0
/********************链接数据库 *******************************/
select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
Top
3 楼txlicenhe(马可)回复于 2003-12-01 18:53:21 得分 80
在存储过程中最好不要使用 sp_addlinkedserver,毕竟它只需建立一次就够了,以后不用再建的。
所以最好用:opendatasource的方式。Top
4 楼txlicenhe(马可)回复于 2003-12-01 18:54:42 得分 0
或者在存储过程的外面建立连接,在存储过程内部直接使用即可。
select * from 别名.库名.dbo.表名
Top
5 楼xlhl(顽皮兔子)回复于 2003-12-01 19:19:34 得分 0
markTop
6 楼ghosthjt(天煞孤星)回复于 2003-12-01 19:25:40 得分 20
同意马可的意见,用opendatasource是明智的选择,关于Opendatescource的用法,参考sql server 的帮助文件,sql 编程的必备帮助Top




