觸發器問題(怎樣在一個數據庫中的觸發器中訪問另一個數據庫裡面的表呢)
--如果兩個庫在同一個sql例項中
select * from 另一庫.dbo.表
--如果兩個庫在不同的sql例項中
select * from openrowset('sqloledb','另一sql例項名';'sa';'111',另一庫.dbo.表)
--訪問不同電腦上的資料庫(遠端只要聯好網就一樣)
--如果經常訪問或資料量大,建議用連結伺服器
--建立連結伺服器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','遠端伺服器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'使用者名稱','密碼'
go
--查詢示例
select * from srv_lnk.資料庫名.dbo.表名
--匯入示例
select * into 表 from srv_lnk.資料庫名.dbo.表名
go
--以後不再使用時刪除連結伺服器
exec sp_dropserver 'srv_lnk','droplogins'
--如果只是臨時訪問,可以直接用openrowset
--查詢示例
select * from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
--匯入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
如果你在觸發器中訪問不同sql例項下的資料,還要注意一個事務的問題.
必須啟動你的sql伺服器和你訪問的sql伺服器上的msdtc服務
我的電腦--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啟動,並將啟動型別設定為"自動啟動"
---------------------------------------------------
1、同伺服器 select * from 資料庫名.dbo.表名 where 條件
2、不同伺服器
SELECT * FROM OpenRowset('MSDASQL', 'Driver=SQL Server;Server=伺服器名(或IP);UID=sa;PWD=伺服器資料庫密碼', 資料庫名.dbo.表 ) where 條件
SELECT *
FROM OPENROWSET('SQLOLEDB','伺服器名(或IP)';'sa';'伺服器資料庫密碼',
'查詢的sql語句')
SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=伺服器名(或IP);User ID=sa;Password=伺服器資料庫密碼'
).資料庫名.dbo.表 where 條件