2011-07-11 118 views
2

尽管在将它传递给sp_executesql时声明了一个类型为“cursor”的变量,但我得到错误“操作数类型冲突:nvarchar与游标不兼容”。是否可以将游标变量传递给sp_executesql?

declare CURSOR_TO_PASS cursor for... --a simple select statement 
--cursor opened, values obtained, etc... 
declare @item nvarchar(5); 
declare @seqno int; 
[email protected] 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?

回答

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,它工作得很好。