设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1568|回复: 0

sql server跨库查询方法

[复制链接]

19

主题

159

金钱

295

积分

入门用户

发表于 2019-4-22 16:20:29 | 显示全部楼层 |阅读模式

方式一(dbo可以省略)
  1. SELECT
  2.     *
  3. FROM   数据库A.dbo.表A a,
  4.        数据库B.dbo.表B b
  5. WHERE a.field = b.field
复制代码


方式二(在一个数据库挂上另一个数据库的外链)
  1. //映射一个远程数据库
  2. EXEC sp_addlinkedserver  '远程数据库的IP或主机名',N'SQL Server'

  3. //登录远程数据库
  4. EXEC sp_addlinkedsrvlogin '远程数据库的IP或主机名', 'false', NULL, '登录名', '密码'

  5. //登录后,可以用以下格式操作远程数据库中的对象
  6. SELECT * FROM [远程数据库的IP或主机名].[数据库名].[dbo].[表名]
  7. INSERT INTO OPENROWSET('sqloledb', '192.168.0.100'; 'sa'; '10060', 'select * from knss2009.dbo.yw_kck')
  8. SELECT * FROM yw_kck

  9. //示例:
  10. --创建链接服务器
  11. EXEC sp_addlinkedserver  'ITSV ',
  12.                        ' ',
  13.                        'SQLOLEDB ',
  14.                        '远程服务器名或ip地址'
  15. EXEC sp_addlinkedsrvlogin   'ITSV ',
  16.                            'false ',
  17.                            NULL,
  18.                            '用户名',
  19.                            '密码'

  20. //查询示例
  21. SELECT
  22.     *
  23. FROM ITSV.数据库名.dbo.表名

  24. //导入示例
  25. SELECT
  26.     * INTO 表
  27. FROM ITSV.数据库名.dbo.表名

  28. //以后不再使用时删除链接服务器
  29. EXEC sp_dropserver   'ITSV ', 'droplogins '
复制代码



方式三
连接远程/局域网数据(openrowset/openquery/opendatasource)
1、openrowset (比较推荐这种做法)
  1. //查询示例
  2. SELECT
  3.     *
  4. FROM OPENROWSET('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名)

  5. //生成本地表
  6. SELECT
  7.     * INTO 表
  8. FROM OPENROWSET('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名)

  9. //把本地表导入远程表
  10. INSERT OPENROWSET('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
  11.     SELECT
  12.        *
  13.     FROM 本地表

  14. //更新本地表
  15. UPDATE b
  16. SET b.列A = a.列A
  17. FROM OPENROWSET('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名) AS a
  18. INNER JOIN 本地表 b
  19.     ON a.column1 = b.column1
复制代码


2、openquery用法需要创建一个连接
  1. //首先创建一个连接创建链接服务器
  2. EXEC sp_addlinkedserver  'ITSV ',
  3.                         ' ',
  4.                         'SQLOLEDB ',
  5.                         '远程服务器名或ip地址'

  6. //查询
  7. SELECT * FROM OPENQUERY(ITSV, 'SELECT *  FROM 数据库.dbo.表名')

  8. //把本地表导入远程表
  9. INSERT OPENQUERY(ITSV, 'SELECT *  FROM 数据库.dbo.表名') SELECT *  FROM 本地表

  10. //更新本地表
  11. UPDATE b
  12. SET b.列B = a.列B
  13. FROM OPENQUERY(ITSV, 'SELECT * FROM 数据库.dbo.表名') AS a
  14. INNER JOIN 本地表 b  ON a.列A = b.列A
复制代码


3、opendatasource/openrowset
  1. SELECT
  2.     *
  3. FROM OPENDATASOURCE('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码').test.dbo.roy_ta

  4. //把本地表导入远程表
  5. INSERT OPENDATASOURCE('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码').数据库.dbo.表名
  6.     SELECT
  7.        *
  8.     FROM 跨库取数使用示例(注意做判断):

  9. IF EXISTS( SELECT
  10. FROM sys.synonyms
  11. WHERE name = 'SYN305_ys_CostAndCashSet') DROP SYNONYM SYN305_ys_CostAndCashSet
  12. GO

  13. CREATE SYNONYM SYN305_ys_CostAndCashSet FOR [dotnet_erp305_hnjy].dbo.ys_CostAndCashSet
  14. GO
复制代码


不允许远程访问出现异常解决方案:
  1. EXEC sp_configure 'show advanced options',1
  2. reconfigure

  3. EXEC sp_configure 'Ad Hoc Distributed Queries',1
  4. reconfigure
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表