カーソルを使用するストアド プロシージャがあります。これは SQL Server 2005 で作成され、SQL Server 2008 までは問題なく動作していました。
最近、SQL Server 2012 に移行することを決定し、すべてのデータベースを新しい環境に移行しようとしましたが、このストアド プロシージャはカーソルを開くときに失敗します。
ここにその部分があります:
BEGIN TRY
SELECT @SqlStatement = 'DECLARE cursorMoveStatements INSENSITIVE CURSOR FOR '
+ 'Select [name],[status] From [' + @ServerName
+'].['+ @DBName
+ '].sys.sysfiles FOR READ ONLY'
EXEC sp_executesql @SqlStatement
OPEN cursorMoveStatements
..... --Do Some Stuff
END TRY
@ServerName
適切に@DBName
宣言され、以前に設定されます。実行すると、エラーは、開こうとしたときにcursorMoveStatementsが設定されていないことを示しています。
カーソルを含む変数を設定し、それを sp_executesql に渡し、その OUTPUT キーワードを介して設定されたカーソルを取得できることはわかっていますが、この SP の大部分を書き直す必要があります (これは本当に長いです)。この部分 (古いバージョンの SQL では問題なく動作する) が失敗する原因は、SQL Server の何が変わったのだろうか。MSDN を検索しましたが、現在何が違うのかについての手がかりが見つかりませんでした。
これを「修正」しない場合でも、少なくとも SQL Server 2012 でこれが機能しない原因の違いを理解できるようにするために、何か助けはありますか?