2017-08-30 130 views
0

我正在開發與Visual Studio 2017年的報告網絡。我所有的SQL查詢參數化和正常工作。問題出在某些查詢中,像程序中那樣具有exec命令。防止SQL執行查詢與執行或執行

例如:

而不是SELECT * FROM tabla WHERE [email protected]
我已經把exec('SELECT * FROM tabla WHERE [email protected]')

EXEC情況下無法正常工作。該錯誤信息是:

必須聲明標量變量「」 @id「」「& vbCrLf &‘必須聲明標量變量‘’@id’」「 任何人都知道一個可能的解決方案

。?

非常感謝

+0

可以使用'sp_executesql'或將查詢轉換爲函數/存儲過程並使用參數調用它們。 –

+0

另一種選擇是使用EF並使用LINQ構建查詢。這甚至可以讓你根據用戶的選擇構建實際的查詢,例如使用不同的Where()條件,OrderBy()這些字段。 –

回答

3

你使用的參數在「參數化」的位置(即你不是想參數表/列名),你可以使用sp_executesql使用的參數,以保持提供:

exec sp_executesql N'select * from tabla where [email protected]',N'@id int',@id = @id 

使用exec創建不訪問任何外部變量/參數的一個新的上下文,但sp_executesql讓你明確地傳遞變量到內環境。 (沒有要求內部和外部變量名稱相同,但通常保持最簡單)

+0

好用!謝謝! –