declare @qry nvarchar(max)
set @qry='IType, INum, IDate, PO, FCode, Tx, Fr, TI, Not'
select @qry = 'select distinct ti.ID,' + @qry +
' from tblInfo ti inner join tblheadr th on ti.IA=1 AND ti.BId = ' +
CAST(@BId as varchar) + ' AND th.CUId =' + CAST(@UserID as varchar)现在我想要我的查询
select distinct
ti.ID, ti.IType, ti.INum, ti.IDate, ti.PO, ti.FCode, ti.Tx, ti.Fr, ti.TI, ti.Not
from
tblInfo ti
inner join
tblheadr th on ti.IA = 1 AND ti.BId = 285 and th.CUId = 2我需要为'ti.'中的每个值添加@qry。
你能建议我如何把它分开,在ti.之间加上@qry吗?
发布于 2014-09-02 15:23:01
下面是一个较短的解决方案:
SET @qry = 'IType, INum, IDate, PO, FCode, Tx, Fr, TI, [Not]'
SET @qry = 'ti.' + REPLACE(@qry, ', ', ', ti.')您应该将Not放在方括号中,因为它是一个保留的SQL关键字。
发布于 2014-09-02 12:37:24
这应该是可行的:
select @qry =
'select distinct ti.ID,'
+ replace(replace(replace(@qry, ', Not', ', [Not]'), @qry, 'ti.' + @qry), ', ',', ti.')
+' from tblInfo ti inner join tblheadr th on ti.IA=1 AND ti.BId = '
+ QUOTENAME(CAST(@BId as varchar(max)), '''')
+ ' AND th.CUId ='
+ QUOTENAME(CAST(@UserID as varchar(max)),'''')您确实应该为varchar强制转换指定大小,还要注意not是一个需要转义的关键字,所以我添加了这个关键字。很可能还需要使用QUOTENAME将参数值括在引号中(我也添加了)。
得到的@qry变量如下:
select distinct
ti.ID,IType, ti.INum, ti.IDate, ti.PO, ti.FCode, ti.Tx, ti.Fr, ti.TI, ti.[Not]
from tblInfo ti
inner join tblheadr th on ti.IA=1 AND ti.BId = 'BidA' AND th.CUId ='UserA'如果变量声明为:
declare @userid nvarchar(max) = 'UserA'
declare @bid nvarchar(max) = 'BidA'附带说明:查看tblInfo和tblHeadr之间的联接,似乎没有连接条件,只有单独表上的条件(可能应该用WHERE子句编写)。也许你忘了加入th.? = ti.??
https://stackoverflow.com/questions/25623078
复制相似问题