【问题标题】:DB2 to SQL Server migration: The conversion of cursors in return statements is not supportedDB2 到 SQL Server 迁移:不支持返回语句中的游标转换
【发布时间】: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


【解决方案1】:

发布对我有用的东西。由于 proc 只是返回一个 select 语句,因此在这个用例中使用游标不会增加任何优势。重构了没有光标的过程,只使用了 select 语句。

BEGIN 
 SELECT * FROM EMP
 RETURN 0
END

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多