职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 911|回复: 2

SQL server跨实例查询

[复制链接]
大眼娃娃 发表于 2009-8-23 11:20 | 显示全部楼层 |阅读模式
select a.*,b.* from opendatasource('sqloledb','server=服务器名或实例名;uid=sa;pwd=;database=库名').库名.dbo.table1 a,table2 b
where ····
这样查询是没有问题

select a.*,b.*
from table1 a,服务器名(或实例名).库名.dbo.table2 b
where ····
这样查就发现一个问题
如果实例名带有“\\”之类的符号就会提示语法错误
如server\\data
server-1\\data等
使用上面的方法就不会报错

另外再请教一下:如果我跨实例的库里面要查多张表的内容用前面一种方法应该如何写?即:
data.dbo.table1,data.dbo.table2
问题补充:
请帮忙分析一下后一种方法的错误原因?
使用[]将实例名括起来还是有错的~

期待各位达人高见~
bmw 发表于 2009-8-23 11:21 | 显示全部楼层

SQL server跨实例查询

如果实例名带有“\”之类的符号就会提示语法错误
需要使用分隔符
在SQL server中是中括号[],用中括号将其括起来
这样就可以了
dgyys 发表于 2009-8-23 11:21 | 显示全部楼层

SQL server跨实例查询

select d.lb as 类别,a.hh as 货号,d.pm as 品名,d.bm as 别名,a.kh as 位置,d.cd as 产地,d.gg as 规格, d.pdw as 剂型,b.sssl as 进货量,c.sl as 总销量,a.sjsl as 当前库存, d.cgry as 采购员,d.sx as 属性,d.jj as 进价,d.lsj as 零售价,isnull(f.sj,0) as 会员价
from ywbalance a
left join (select hh,sum(sssl) as sssl from rkdzk where (kdrq between '2009-4-1' and '2009-6-30') group by hh)
b on a.hh=b.hh
left join (select hh,sum(sl) as sl from fhdzk where (kdrq between '2009-4-1' and '2009-6-30')group by hh)
c on a.hh=c.hh
left join openrowset('sqloledb','192.168.0.100';'sa';'111','select * from knss2009.dbo.yw_kck')
d on a.hh=d.hhleft join openrowset('sqloledb','192.168.0.100';'sa';'111','select * from knss2009.dbo.GLMemberPrice') f on a.hh=f.hh
where (b.sssl>0 or c.sl>0) and fperiod='0' order by a.hh

这是我在公司用到的
我用的是openrowse函数
我感觉这个不错
代码有点多
不过原理很简单
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 12:21 , Processed in 0.115117 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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