Можно ли передать переменную курсора в sp_executesql? - PullRequest
2 голосов
/ 11 июля 2011

Несмотря на объявление переменной как типа «курсор» при передаче ее в sp_executesql, я получаю ошибку «Столкновение с типом операнда: 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 - курсор, который я назначаю @sc при вызове sp_executesql.Итак, возможно ли передать курсор в sp_executesql?

1 Ответ

3 голосов
/ 11 июля 2011

Я выяснил решение вскоре после публикации. Фактически можно передать переменную курсора. Требуется лишь промежуточный шаг, когда вы должны назначить курсор «переменной курсора», как показано здесь: 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, и все заработало нормально.

...