SQL Server:在两个以逗号分隔的值之间的字符串中添加字符

时间:2014-09-02 12:08:32

标签: sql-server-2008

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

2 个答案:

答案 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关键字。