SQLSERVER左右链接怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLSERVER左右链接怎么写相关的知识,希望对你有一定的参考价值。

select t.goodsid,t.goodsname,g.instorenofrom TC_StorageMain t left join TC_InStorageDetail g on t.GoodsID = g.GoodsID, TC_InStorage mwhere t.fWPLX = '无'and g.InStoreNo = m.InStoreNoand m.InStoreDate >= '2014-07-01'
如上段SQL,这种情况左右链接该怎么写。上述写的查询结果貌似不对。
TC_StorageMain表中的数据如图,查询出来的结果TC_StorageMain表中并没有全部显示。

参考技术A

这个问题应该是因为后面表TC_InStorage的连接造成的,你对表TC_InStorage也应该用左连接的方式

select t.goodsid,t.goodsname,g.instorenofrom TC_Storage Main t 
left  join TC_InStorageDetail g on t.GoodsID = g.GoodsID
left  join TC_InStorage m on g.InStoreNo = m.InStoreNo
where t.fWPLX = '无'
and m.InStoreDate >= '2014-07-01'

参考技术B select t.goodsid,t.goodsname,g.instoreno
from TC_StorageMain t 
left join TC_InStorageDetail g on t.GoodsID = g.GoodsID
left join TC_InStorage m on 条件
where t.fWPLX = '无'
and g.InStoreNo = m.InStoreNo
and m.InStoreDate >= '2014-07-01'

这样,你的TC_StorageMain 的数据就会都显示了(符合你的where条件的数据)。

sqlserver 链接服务器

我一台服务器地址是192.168.1.212 上面有个数据库mrm_production
另一台服务器地址是192.168.1.314 上面有个数据库mrm_pos
现在我向在第一台服务器上写报表,需要用到314的数据库,怎么链接?
网上那些教程来不急研究,比较紧急。
最好是代码,不要复制的。

参考技术A 加入 我创建一个存储过程:
create porc AB_CDE
@A int,
@B int
as
这里面就是内容了
就在阵容里面具体 操作 存储过程~~~~~~~~

给一个例子:

--插入时要判断是否重复插入
declare @id int
declare @sNo varchar(100)
declare @sName varchar(100)
declare @sex varchar(10)
declare @jiguan varchar(100)
declare @gongzuodanwei varchar(200)
declare @zhiwu varchar(100)
declare @tongxundizhi varchar(200)
declare @youzhengbianma varchar(100)
declare @lianxidianhua varchar(100)
declare @yidongdianhua varchar(100)
declare @dianziyouxiang varchar(100)
declare @shenfenzheng varchar(100)
declare @chushengriqi datetime
declare @xueli varchar(100)
declare @biyexuexiao varchar(100)
declare @biyezhuanye varchar(100)
declare @biyenianyue datetime
declare @xuewei varchar(100)
declare @mingzhu varchar(100)
declare @zhengzhimianmao varchar(100)
declare @regDate datetime
declare @result int
set @result=0
set @regDate=getdate()
begin tran
declare cur cursor for select 学号,姓名,性别,籍贯,工作单位,职务,通讯地址,邮政编码,联系电话,移动电话,电子邮箱,身份证号码,出生日期,学历,毕业学校,毕业专业名称,毕业年月,学位,民族,政治面貌 from #tmp
open cur
fetch next from cur into @sNo,@sName,@sex,@jiguan,@gongzuodanwei,@zhiwu,@tongxundizhi,@youzhengbianma,@lianxidianhua,@yidongdianhua,@dianziyouxiang,@shenfenzheng,@chushengriqi,@xueli,@biyexuexiao,@biyezhuanye,@biyenianyue,@xuewei,@mingzhu,@zhengzhimianmao

while @@fetch_status=0
begin
--学生在学生表中不存在才插入
if not exists (select 1 from vtd02 where 学号=@sNo)
begin
--插入学生资料
exec @id=PTD02_Insert @F01=@sName,@F02=@sex,@F36=@sNo,@FIDTB01=@classId,@F32=10,@F05=@jiguan,
@F17=@gongzuodanwei,@F15=@zhiwu,@F11=@tongxundizhi,
@F07=@youzhengbianma,@F10=@lianxidianhua,@F09=@yidongdianhua,
@F08=@dianziyouxiang,@F18=@shenfenzheng,@F06=@chushengriqi,
@F43=@xueli,@F12=@biyexuexiao,@F13=@biyezhuanye,
@F14=@biyenianyue,@F44=@xuewei,@F04=@mingzhu,@F45=@zhengzhimianmao
--插入学生帐号
exec PUB02_Insert @F01=@sNo,@F02=@password,@FIDUB01=3,@FIDF03=@id,@F04=1,@F05=@regDate

fetch next from cur into @sNo,@sName,@sex,@jiguan,@gongzuodanwei,@zhiwu,@tongxundizhi,@youzhengbianma,@lianxidianhua,@yidongdianhua,@dianziyouxiang,@shenfenzheng,@chushengriqi,@xueli,@biyexuexiao,@biyezhuanye,@biyenianyue,@xuewei,@mingzhu,@zhengzhimianmao

end
else
begin
fetch next from cur into @sNo,@sName,@sex,@jiguan,@gongzuodanwei,@zhiwu,@tongxundizhi,@youzhengbianma,@lianxidianhua,@yidongdianhua,@dianziyouxiang,@shenfenzheng,@chushengriqi,@xueli,@biyexuexiao,@biyezhuanye,@biyenianyue,@xuewei,@mingzhu,@zhengzhimianmao
end
end
close cur
deallocate cur
if @@error<>0 rollback tran
commit tran

上面比如是一个存储过程。
然后: exec PUB02_Insert @F01=@sNo,@F02=@password,@FIDUB01=3,@FIDF03=@id,@F04=1,@F05=@regDate
这个就是在上面掉用的存储过程。 exec 存储过程name 具体参数

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela
参考技术B SELECT * FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=192.168.1.314;User ID=sa;Password=password'
). mrm_pos.dbo.表名

你想怎么用就怎么用,update,delete同上本回答被提问者采纳
参考技术C 其实可以用一台数据库链接另外一台数据库的方法

首先,建立能访问314数据库mrm_pos的SQL 账号

然后在212 上面里面注册314服务器
--注册一个服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.1.314'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sql用户名','密码'
--
select * from srv_lnk.mrm_pos.dbo.表名

以上供参考!
参考技术D 以下脚本在212的数据库上执行
--创建DVSERVER链接服务器
exec sp_addlinkedserver
@server='192.168.1.314',
@provider='SQLNCLI',
@srvproduct='mrm_pos',
@datasrc='192.168.1.314'
go
--建立链接服务器登录映射
exec sp_addlinkedsrvlogin
@rmtsrvname='192.168.1.314',
@useself='false',
@locallogin='sa',
@rmtuser='sa',
@rmtpassword='314的sa密码'
GO
--select * from [192.168.1.314].mrm_pos.dbo.表名
第5个回答  2011-06-30 --创建DVSERVER链接服务器
exec sp_addlinkedserver
@server='192.168.1.314',
@provider='SQLNCLI',
@srvproduct='mrm_pos',
@datasrc='192.168.1.314'
go
--建立链接服务器登录映射
exec sp_addlinkedsrvlogin
@rmtsrvname='192.168.1.314',
@useself='false',
@locallogin='sa',
@rmtuser='sa',
@rmtpassword='314的sa密码'
GO
--select * from [192.168.1.314].mrm_pos.dbo.表名

这是正解

以上是关于SQLSERVER左右链接怎么写的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver怎么查询链接服务器

sql server 2008 怎么还原数据库

怎么用sqlserver写c语言

sqlserver isnull在mysql中怎么写

slqserver中给表增加一个字段的语句怎么写

slqserver中给表增加一个字段的语句怎么写