【发布时间】:2011-12-23 23:40:03
【问题描述】:
我在我的 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 år blev Klassselotteriet omdannet til et aktieselskab?
Få hjælp til svaret.', challenge_23_a = '1992' WHERE subscriberwork_id = ' + 转换(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 语句的输出剪切并粘贴到查询分析器中,看看它的格式是否正确。
标签: sql sql-server-2008 stored-procedures dynamic-sql