尽管在将变量传递给sp_executesql时将变量声明为类型“cursor”,但我收到错误“操作数类型冲突:nvarchar与游标不兼容”。
declare CURSOR_TO_PASS cursor for... --a simple select statement
--cursor opened, values obtained, etc...
declare @item nvarchar(5);
declare @seqno int;
--@item and @seqno populated
declare @sql nvarchar(400) = N'update MYTABLE set Survey' + cast(@seqno as nvarchar(2)) + N' = @itemvalue where current of @sc';
exec sp_executesql @sql, N'@itemvalue nvarchar(5), @sc cursor', @itemvalue = @item, @sc = CURSOR_TO_PASS;
我不知道出了什么问题,因为我已经将@sc声明为游标,而CURSOR_TO_PASS是一个游标,我在调用sp_executesql时将其分配给@sc。那么,是否可以将游标传递给sp_executesql?
答案 0 :(得分:3)
我在发布此消息后不久就找到了解决方案。实际上可以传递游标变量。只需要一个中间步骤,你必须将光标分配给“游标变量”,如下所示:http://msdn.microsoft.com/en-us/library/ms190028.aspx“游标可以通过两种方法之一与游标变量相关联:”,两者都有需要一个初始的,基本的游标变量声明,如“DECLARE @MyVariable CURSOR;”。
所以我将这些行添加到我的代码中:
declare @cursorvariable cursor;
set @cursorvariable = CURSOR_TO_PASS;
然后我将@sc = CURSOR_TO_PASS
更改为@sc = @cursorvariable
,并且工作正常。