我在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årblevKlasselotteriet omdannet til et aktieselskab?
Fåhjælptilsvaret。', challenge_23_a ='1992'WHERERE 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,但不会抛出任何错误。
我在这里缺少什么?
答案 0 :(得分:1)
像这样运行:
execute (@subWorksQuery)
[你不会从变量中的update语句中获得任何回复,并且你不能像这样运行execute (@execReturn = @subWorksQuery)
]
如果没有括号,它似乎开始解析,假设它是一个存储过程名称,但是当它达到一个最大长度时失败。
在说,最好将sp_executesql
与参数一起使用。
答案 1 :(得分:0)
我不确定你在返回值中寻找的是什么,但是如果你只需要受影响的行数,这应该很容易获得。
变化:
execute @execReturn = @subWorksQuery
为:
execute (@subWorksQuery)
select @execReturn = @@ROWCOUNT
答案 2 :(得分:0)
只是一个想法......你的@d参数是一个十进制值。你的id是int吗?是否存在可能的数据类型冲突?
你的sp输入参数是如何定义的?你可以发布完整的sp?
戴夫