【发布时间】:2021-09-17 20:16:13
【问题描述】:
我们正在使用 Microsoft SQL Server 迁移助手将 DB2 过程转换为 SQL Server,并在生成的 SQL Server 过程中出现以下错误:
错误:DB22SS0245 不支持返回语句中游标的转换
DB2 proc(省略创建语法和实际复杂逻辑):
BEGIN
DECLARE temp_cursor CURSOR WITH HOLD WITH RETURN TO CALLER
FOR SELECT * FROM EMP
FOR READ ONLY;
OPEN temp_cursor;
END
如何以最少的更改将其转换为等效的 SQL Server?我在这里读到的可能的解决方案建议对 proc 进行相当大的更改,这对我们来说很困难,因为 proc 庞大且数量众多。谢谢!
【问题讨论】:
-
对于这样的事情,您必须在 SQL Server 中找到等效的方法 - 任何非 ANSI 标准 SQL 都可能需要进行相当多的更改,甚至达到完整的级别重写,因为每个数据库支持完全不同的功能。我预计这将是一个缓慢的过程,需要每个产品的文档。
-
最少的变化 傻瓜的天堂和承包商的梦想。这绝不是迁移的“最佳”方式,因为它避免了设计数据库和编写对底层数据库引擎有效的代码的艰巨工作。
-
在 SQL Server 中存储过程只能返回
int值作为它们的返回状态。不过,您仍然可以声明@CursorName cursor output参数,并使用类似set @CursorName=cursor for select foo from dbo.Bar where Baz = 1的内容对其进行初始化 -
是的,在 proc 的末尾有一个
RETURN 0,为简洁起见忽略。这对我不起作用,并且出现同样的错误@AlwaysLearning -
更好的问题:为什么你首先想要一个光标,它们很少是正确的解决方案
标签: sql-server db2 database-migration mssql-jdbc database-optimization