2015年10月28日 星期三

[SQL] 如何執行自己組合的SQL字串(sp_executesql)

寫sp的過程中

常常會遇到必須自己組合的sql

像是一直and下去的查詢條件

或是where的值是必須經過一段複雜的運算才出來的這種

之前的作法就是很直覺的把字串組合起來

像是

set @deleteSql = 'delete from aaa where projId = @paramPrjId and place not in ('+@strPlace+') ';
exec @deleteSql

其中in 裡面的資料就是上面說的where的值是必須經過一段複雜的運算才出來的這種

結果因為一串的分號跟逗號,造成字串打架

還以遇到數字型態也會出問題

他會一直說我沒有辦法把數字跟字串組合起來

(明明c#跟java就可以...)

遇到問題當然有請google大神

我想我一天8小時的工時大概有4小時在google吧...

原來有ms sql server有一個指令叫 sp_executesql

可以在後面加上n個參數,並且定義每個參數的型態

範例如下

set @deleteSql = 'delete from aaa where projId = @paramPrjId and place not in ('+@strPlace+') ';
 EXECUTE sp_executesql @deleteSql, N'@paramPrjId int',  
                        @paramPrjId = @prjId

沒有留言:

張貼留言