2014-09-02 105 views
0
之间添加一个字符串的字符
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) 

现在我想我的查询作为SQL服务器:2逗号分隔值

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

[不良习惯踢:声明VARCHAR没有(长度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without -length.aspx) - 你应该**总是**为你使用的任何'varchar'变量和参数提供一个长度 – 2014-09-02 12:22:44

回答

0

这里有一个较短的解决方案:

SET @qry = 'IType, INum, IDate, PO, FCode, Tx, Fr, TI, [Not]' 
SET @qry = 'ti.' + REPLACE(@qry, ', ', ', ti.') 

你应该把Not在方括号因为它是一个保留SQL关键字。

+0

它更短,但生成的查询不会运行:p我的第一个答案只是短,在我决定解决其他问题之前。 – jpw 2014-09-02 18:38:03

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.?