2011-07-11 25 views
2

sp_executesqlに渡すときに変数を "cursor"型として宣言していますが、 "Operand type clash: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 "カーソルは、次の2つの方法のいずれかによってカーソル変数に関連付けることができます:"、どちらも初期値、 "DECLARE @MyVariable CURSOR;"のような基本カーソル変数宣言。

だから私は私のコードにこれらの行を追加しました:

declare @cursorvariable cursor; 
set @cursorvariable = CURSOR_TO_PASS; 

は、その後、私は@sc = @cursorvariable@sc = CURSOR_TO_PASSを変更し、それがうまく働きました。

関連する問題