方式一(dbo可以省略)
SELECT * FROM 數據庫A.dbo.表A a, 數據庫B.dbo.表B b WHERE a.field = b.field
方式二(在一個數據庫掛上另一個數據庫的外鏈)
//映射一個遠程數據庫 EXEC sp_addlinkedserver '遠程數據庫的IP或主機名',N'SQL Server' //登錄遠程數據庫 EXEC sp_addlinkedsrvlogin '遠程數據庫的IP或主機名', 'false', NULL, '登錄名', '密碼' //登錄后,可以用以下格式操作遠程數據庫中的對象 SELECT * FROM [遠程數據庫的IP或主機名].[數據庫名].[dbo].[表名] INSERT INTO OPENROWSET('sqloledb', '192.168.0.100'; 'sa'; '10060', 'select * from knss2009.dbo.yw_kck') SELECT * FROM yw_kck //示例: --創建鏈接服務器 EXEC sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程服務器名或ip地址' EXEC sp_addlinkedsrvlogin 'ITSV ', 'false ', NULL, '用戶名', '密碼' //查詢示例 SELECT * FROM ITSV.數據庫名.dbo.表名
//導入示例 SELECT * INTO 表 FROM ITSV.數據庫名.dbo.表名 //以后不再使用時刪除鏈接服務器 EXEC sp_dropserver 'ITSV ', 'droplogins '
方式三
連接遠程/局域網數據(openrowset/openquery/opendatasource)
1、openrowset (比較推薦這種做法)
//查詢示例 SELECT * FROM OPENROWSET('SQLOLEDB ', 'sql服務器名'; '用戶名'; '密碼', 數據庫名.dbo.表名) //生成本地表 SELECT * INTO 表 FROM OPENROWSET('SQLOLEDB ', 'sql服務器名'; '用戶名'; '密碼', 數據庫名.dbo.表名) //把本地表導入遠程表 INSERT OPENROWSET('SQLOLEDB ', 'sql服務器名'; '用戶名'; '密碼', 數據庫名.dbo.表名) SELECT * FROM 本地表 //更新本地表 UPDATE b SET b.列A = a.列A FROM OPENROWSET('SQLOLEDB ', 'sql服務器名'; '用戶名'; '密碼', 數據庫名.dbo.表名) AS a INNER JOIN 本地表 b ON a.column1 = b.column1
2、openquery用法需要創建一個連接
//首先創建一個連接創建鏈接服務器 EXEC sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程服務器名或ip地址' //查詢 SELECT * FROM OPENQUERY(ITSV, 'SELECT * FROM 數據庫.dbo.表名') //把本地表導入遠程表 INSERT OPENQUERY(ITSV, 'SELECT * FROM 數據庫.dbo.表名') SELECT * FROM 本地表 //更新本地表 UPDATE b SET b.列B = a.列B FROM OPENQUERY(ITSV, 'SELECT * FROM 數據庫.dbo.表名') AS a INNER JOIN 本地表 b ON a.列A = b.列A
3、opendatasource/openrowset
SELECT * FROM OPENDATASOURCE('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼').test.dbo.roy_ta //把本地表導入遠程表 INSERT OPENDATASOURCE('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼').數據庫.dbo.表名 SELECT * FROM 跨庫取數使用示例(注意做判斷): IF EXISTS( SELECT 1 FROM sys.synonyms WHERE name = 'SYN305_ys_CostAndCashSet') DROP SYNONYM SYN305_ys_CostAndCashSet GO CREATE SYNONYM SYN305_ys_CostAndCashSet FOR [dotnet_erp305_hnjy].dbo.ys_CostAndCashSet GO
不允許遠程訪問出現異常解決方案:
EXEC sp_configure 'show advanced options',1 reconfigure EXEC sp_configure 'Ad Hoc Distributed Queries',1 reconfigure