我在SP內執行動態查詢時遇到了一些麻煩,我想請求一些幫助,因爲無論我嘗試什麼,都無法正確執行它:在SP內執行動態查詢的最佳方法
我曾嘗試:
SET @subWorksQuery =
'UPDATE JK_SubscriberWorks SET ' +
'update_date = convert(datetime, ''' + @dateNow + ''', 103), ' +
'challenge_' + convert(nvarchar(2), @challengeDay) + '_q = ''' + @challengeQuestion + ''', ' +
'challenge_' + convert(nvarchar(2), @challengeDay) + '_a = ''' + @challengeAnswer + ''' ' +
'WHERE subscriberwork_id = '' + convert(nvarchar(10), @subscriberWorksId) + '';';
execute @execReturn = @subWorksQuery
,但我總是得到:
消息203,級別16,狀態2,過程sp_InsertChallengeResponse_test, 線112
名稱'UPDATE JK_SubscriberWorks SET update_date = convert(datetime,'23 -12-2011 23:35:17',103),challenge_23_q = 'Hvilketårblev Klasselotteriet omdannet til et aktieselskab?
Fåhåælptil svaret。', challenge_23_a ='1992'WHERE subscriberwork_id ='+ convert(nvarchar(10),@subscriberWorksId)+';'不是有效的 標識符。
去除該錯誤的UPDATE語句和來看,它獨立,運行和執行更新
如果我使用sp_executesql
像
SET @subWorksQuery =
N'UPDATE JK_SubscriberWorks SET ' +
'update_date = @a, ' +
'challenge_' + convert(nvarchar(2), @challengeDay) + '_q = @b, ' +
'challenge_' + convert(nvarchar(2), @challengeDay) + '_a = @c ' +
'WHERE subscriberwork_id = @d;';
SET @parmDefinition = N'@a datetime, @b nvarchar(250), @c nvarchar(500), @d decimal';
execute sp_executesql
@subWorksQuery,
@parmDefinition,
@a = @CreateDate, @b = @challengeQuestion, @c = @challengeAnswer, @d = @subscriberWorksId;
它從未執行UPDATE ,但不會拋出任何錯誤。
缺少什麼我在這裏?
使用SQL查詢分析器並修改您的第一個示例以執行PRINT @subWorksQuery。現在將該PRINT語句的輸出剪切並粘貼到查詢分析器中,並查看它是否正確地形成。 – 2011-12-27 13:35:45