2
有什麼方法可以調用sp_executesql,而參數不依賴於它們在存儲中定義的順序嗎?與exec相同的查詢效果很好,如果你有相同的順序它也可以很好地工作,但是它必須逐個匹配參數,因爲有時候我會用helper動態地調用這個調用,並且如果dto對象不能在相同的順序中沒有相同的字段,不能很好地工作。sp_executesql中的命名參數
create procedure ordertest
@PARAM1 INT,
@PARAM2 INT
AS
BEGIN
SELECT @PARAM1 AS ONE, @PARAM2 AS TWO
END
-- this works
EXEC ordertest @PARAM1 = 1, @PARAM2 = 2
exec sp_executesql N'exec ordertest @PARAM1, @PARAM2', N'@param1 int, @param2 int', @param2 = '2', @param1 = '1'
EXEC ordertest @PARAM2 = 2, @PARAM1 = 1
-- this doesn't work
exec sp_executesql N'exec ordertest @PARAM2, @PARAM1', N'@param1 int, @param2 int', @param2 = '2', @param1 = '1'
哇,這太容易了,我很慚愧。有了參數已經在那裏,我沒有得到那些正在被替換,並且相當的呼叫是「執行ordertest 2,1」。謝謝! – Jokin 2015-02-11 15:14:58
沒問題。您也可以重命名它們,這樣讀起來就不那麼容易混淆,但它的工作原理是一樣的。 – 2015-02-11 15:17:38
只是想添加一個註釋,雖然這看起來很混亂,但它看起來是將命名參數與參數化查詢結合起來的正確方法。例如,nLog允許您提供命令文本來運行以插入日誌條目,而'exec ProcName @Param1 = @Param1,@Param2 = @Param2'就是這樣做的方法。 'sp_executesql'正確替換這些參數值。謝謝你的答案。 – Nick 2015-06-26 21:50:57