2014-09-02 143 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.?