資料庫的SQL查詢,涉及多個數據庫
SQL Server跨庫查詢
方式一:
語句
SELECT * FROM 資料庫A.dbo.表A a, 資料庫B.dbo.表B b WHERE a.field=b.field
"DBO"可以省略 如
SELECT * FROM 資料庫A…表A a, 資料庫B…表B b WHERE a.field=b.field
方式二(在一個數據庫掛上另一個數據庫的外鏈):
SqlServer資料庫:
–這句是對映一個遠端資料庫
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
–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
問題:
Error Code: 1267. Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT
解決:
分析:
Mysql查詢報錯
Error Code: 1267. Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='0.001 sec
提示兩個表的編碼不一致,需要進行轉換