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
?
答案 0 :(得分:0)
这应该有效:
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.?
?
答案 1 :(得分:0)
这是一个较短的解决方案:
SET @qry = 'IType, INum, IDate, PO, FCode, Tx, Fr, TI, [Not]'
SET @qry = 'ti.' + REPLACE(@qry, ', ', ', ti.')
您应该将Not
放在方括号中,因为它是一个保留的SQL关键字。