访问不同位置数据库


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,同一服务器上  select * from brm_lvjian.dbo.bdorder  或 select * from brm_lvjian..bdorder
2,不同服务器上数据库的访问
(1)长久式:在本地服务器上创建远程连接
exec sp_addlinkedserver   'dpserver', ' ', 'SQLOLEDB ', '192.168.18.140'
exec sp_addlinkedsrvlogin 'dpserver ', 'false ',null, 'sa', 'sa'
select *  from dpserver.brm_lvjian_new.dbo.bdcustomerprotect    -- 执行:
exec sp_dropserver 'dpserver', 'droplogins'  --删除连接
注:1,或者在数据库 -- 服务器对象 -- 链接服务器上操作
查看链接服务器
sp_helplinkedsrvlogin
详细信息:select * from sys.servers
2,不可select * into 链接服务器...,而要用 insert into 链接服务器..       select ...
 注:在开Rpc的时候提示:不允许对系统目录进行即席更新! 可利用sql语句解决,方法:
 执行:
 EXEC master.dbo.sp_serveroption @server=N'serverstatistics', @optname=N'rpc', @optvalue=N'true'
 GO
 EXEC master.dbo.sp_serveroption @server=N'serverstatistics', @optname=N'rpc out', @optvalue=N'true'
 GO 
 (上述代码可通过右键链接服务器,编写链接服务器脚本为 - CREATE-新查询编辑器窗口得到。)
3,设置超时时间,防止链接服务器挂掉时,无限卡
dbo.sp_serveroption @server=N'serverstatistics', @optname=N'connect timeout', @optvalue=15
connect timeout:连接到链接服务器时的超时值(秒),如果为 0,则使用 sp_configure 的默认remote query timeout 选项值。
query timeout:查询超时值 链接服务器上执行的查询的超时值(秒)。如果为 0,则使用 sp_configure 的默认 query wait 选项值。

4,测试链接服务器是否链接成功。declare @srvr nvarchar(128);
declare @retval int;

SET @srvr = 'oaserver'
EXEC @retval = sys.sp_testlinkedserver @srvr
SELECT @retval

0(成功)或 1(失败)








(2)短暂式:
1)openrowset
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
     insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
    select *from 本地表 

2)opendatasource
SELECT   * FROM   opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 

3)openquery
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

3,链接服务器与事务
在事务中,访问链接服务器,要注意:
1)本地链接服务器内容不能在本地服务器事务中访问,因为链接服务器与发起事务服务器是同一台,故直接引用数据库名称即可。不需要转来转去。
2)在发起事务的服务器上访问链接服务器,在存储过程中执行语句前,要set xact_abort on,不然一般会报错如:
无法启动链接服务器 "bim" 的 OLE DB 访问接口 "SQLNCLI" 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。

4,执行链接服务器上的函数
DECLARE @Customerid int
SET @Customerid =  (SELECT  * from OPENQUERY(BRMSERVER,'select .dbo.[GetCustomerIdByTel](0,18620023427,0)'))
SELECT @Customerid