数据库的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

提示两个表的编码不一致,需要进行转换

将比较等式一边进行字符串转换,如改为“CONVERT(table-colum USING utf8) COLLATE utf8_unicode_ci”

作者:燃烧的小宇宙flying
来源:CSDN
原文:https://blog.csdn.net/weixin_36810906/article/details/80729704
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/sunyaowu315/article/details/83242029