表结构:
店:Id,StoreNo ,StoreName ,Provinces,City,Region
仓库:DepotNo ,DepotName ,Provinces,City,Region
要显示效果的视图结构:
种类(ttype) 店/仓库编号(tNo) 店/仓库名(tName) 所属省(Provinces) 所属市(City) 所属区(Region )
我要从程序中传条件过来,条件有可能有三种情况:
1、where s.StoreNo =234 and d.DepotNo =345
2、where s.StoreNo =234
3、where d.DepotNo =345
这就以为着,我要从两个表中查出相关内容并整合到一起,再显示出来,我写成这样子:
declare @sqlstr varchar(max), @querywhere varchar(max)
set @querywhere='where s.StoreNo =''234'' '
set @sqlstr='
select distinct ''店'' as ttype, s.StoreNo as tNo,s.StoreName as tName,s.Provinces,s.City,s.Region
from ST_Store s,ST_Depot d '+@querywhere+'
union
select distinct ''仓库'' as ttype,d.DepotNo as tNo,d.DepotName as tName,d.Provinces,d.City,d.Region
from ST_Depot d,ST_Store s '+@querywhere
exec(@sqlstr)
执行结果:
种类(ttype) 店/仓库编号(tNo) 店/仓库名(tName) 所属省(Provinces) 所属市(City) 所属区(Region )
店 234 1 广东省 广州市 天河区
仓库 23 2 广东省 广州市 天河区
仓库 456 3 广东省 广州市 白云区
仓库 789 4 广东省 佛山 顺德区
在这里,我只想获取店“234”的资料,但结果连仓库的资料也查出来了,请问怎么写?头疼
你如果只要店了资料,就不需要去ST_Depot中查询啊
不好意思, 如上所述,因为有三种情况,而且查询条件在程序中调用了公共查询窗口执行的,所以必须限定在一条字符串@querywhere中,要满足三种情况都可行
@勇气:
你这个写法有问题的,ST_Depot表中根本就没有约束。这是设计上的问题,如果可以建议不要传入一个where条件,传入两个参数:StoreNo 跟 DepotNo