[英]Parameterized dynamic sql returns no results
在C#應用程序中,我創建了SQL profiler捕獲的以下參數化動態sql語句:
執行此語句不會返回任何結果:
exec sp_executesql N'SELECT IDWebFormAnswer FROM WebFormAnswers WHERE IDWebform = 55 AND IDWebFormQuestion = 478 AND (ANSWER = ''@answer0'')', N'@answer0 nvarchar(2)', @answer0=N'XL'
但是,如果我在下面簡單地用XL替換@ answer0,我會返回4行。
exec sp_executesql N'SELECT IDWebFormAnswer FROM WebFormAnswers WHERE IDWebform = 55 AND IDWebFormQuestion = 478 AND (ANSWER = ''XL'')', N'@answer0 nvarchar(2)', @answer0=N'XL'
我不明白為什么會這樣? 我構建查詢錯了嗎?
使用參數時,不應將其括在引號中。 如果這樣做,那么參數名稱將成為文字字符串。 使用您的代碼,查詢將搜索包含值“@ Answer0”的ANSWER,但沒有。
exec sp_executesql N'SELECT IDWebFormAnswer FROM WebFormAnswers
WHERE IDWebform = 55 AND IDWebFormQuestion = 478 AND
(ANSWER = @answer0)', N'@answer0 nvarchar(2)', @answer0=N'XL'
Steve已經很好地回答了這個問題,所以我會嘗試提供一些技巧,這些技巧是我在使用Dynamic SQL時遇到的幾個故障。 希望它有用。
首先用所有參數聲明寫出你的查詢
DECLARE @answer0 nvarchar(2)
SELECT IDWebFormAnswer
FROM WebFormAnswers
WHERE IDWebform = '55'
AND IDWebFormQuestion = '478'
AND (ANSWER = @answer0)
現在用2個單引號替換所有單引號(我使用CTRL + H,替換'with'')
DECLARE @answer0 nvarchar(2)
SELECT IDWebFormAnswer
FROM WebFormAnswers
WHERE IDWebform = ''55''
AND IDWebFormQuestion = ''478''
AND (ANSWER = @answer0)
下一步中斷此查詢並使用前導和尾隨單引號進行封裝,並與sp_executesql語法集成。
DECLARE @SQLString nvarchar(500),
@ParmDefinition nvarchar(500),
@ParmValue1 nvarchar(2);
/* Build the SQL string one time.*/
SET @SQLString = N'SELECT IDWebFormAnswer
FROM WebFormAnswers
WHERE IDWebform = ''55''
AND IDWebFormQuestion = ''478''
AND (ANSWER = @answer0)';
SET @ParmDefinition = N'@answer0 nvarchar(2)';
/* Execute the string with the first parameter value. */
SET @ParmValue1 = N'XL';
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@answer0 = @ParmValue1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.