У меня возникли проблемы с выполнением динамического запроса внутри моего 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 Klasselotteriet omdannet til et aktieselskab? Få hjælp til 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;
Он никогда не выполняет ОБНОВЛЕНИЕ, но не выдает никакой ошибки.
Что мне здесь не хватает?