我有一个使用游标的存储过程;它是用 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 Server 中发生了什么变化导致这部分(在旧版本的 SQL 中运行良好)失败。我搜索了 MSDN,但找不到关于现在有什么不同的线索。
任何帮助,如果不是“修复”这个问题,至少让我了解 SQL Server 2012 中有什么不同之处导致它不起作用?