2014-02-20 52 views
-3

我希望你能幫助我this..I想獲得的所有行的總和結果查詢..這是sql查詢我到目前爲止..如何添加「+」號的動態SQL

DECLARE @earninglist varchar(1000) 
    Set @earninglist=STUFF((SELECT DISTINCT '],[' 
     +LTRIM([Description]) FROM 
     PR_Earnings 
     ORDER BY '],[' + LTRIM([Description]) 
        FOR XML PATH('') 
        ), 1, 2, '')+']' 

Declare @sql varchar(max) 
set @sql='Select '[email protected]+' from earnings;' 
exec(@sql); 

說,收入列表包含此字段:「可口可樂」,「激勵」我怎樣才能宣佈@earninglist,這樣我可以得到這個下面的查詢:

set @sql='Select Coalesce([Cola],0)+Coalesce([Incentives],0) as total from earnings' 

希望你能幫助我..非常感謝。

+0

對不起向下票我只是在這一個新手,我只是想知道原因爲什麼..如果你是教我這一個你能教我如何做正確無谷歌和不帶鏈接引用合適的人選?我只是從該網站獲得該腳本並嘗試使用它。 – user3312649

回答

1

你應該知道你的腳本對sql注入是開放的。可以寫入描述以放下您的表格。

DECLARE @earninglist varchar(1000) 
Set @earninglist=STUFF((SELECT DISTINCT '],0),coalesce([' 
    +LTRIM([Description]) FROM 
    PR_Earnings (description) 
    ORDER BY '],0),coalesce([' + LTRIM([Description]) 
       FOR XML PATH('') 
       ), 1, 5, '')+'], 0)' 

你可以用這個腳本測試:

SELECT STUFF((SELECT DISTINCT '],0),coalesce([' 
+LTRIM([Description]) FROM 
(values ('cola'),('Incentives')) PR_Earnings (description) 
ORDER BY '],0),coalesce([' + LTRIM([Description]) 
       FOR XML PATH('') 
       ), 1, 5, '')+'], 0)' 

結果:

coalesce([cola],0),coalesce([Incentives], 0) 
0

我敢肯定有其他更優雅的方式,但......爲什麼不直接替換第一次出現的「)」與「)+」中的變量?