sql server跨庫查詢


方式一(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM