将 MS SQL 存储过程移植到 MySQL

Posted

技术标签:

【中文标题】将 MS SQL 存储过程移植到 MySQL【英文标题】:Porting MS SQL stored procedures to MySQL 【发布时间】:2010-12-23 19:08:28 【问题描述】:

我有大约 140 - 150 个存储过程需要从 MS SQL 2005 迁移到 mysql 5.1

在过去 8 小时内成功移植了其中的 0 个后,我决定顺便过来询问是否有人有任何经验、提示或知道一些可以提供帮助的实用程序。

MySQL 管理员不是很有帮助,有一个令人沮丧的“MySQL 错误号 1064 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册以获取正确的语法”。鉴于 SP 的平均长度为 +100 行,因此无法简单地猜测问题所在。

例如。这是我得到的确切错误:

  Script line: 1    You have an error in your SQL syntax; check the manual that
   corresponds to your MySQL server version for the right syntax to use near '' at line 5

然后在第 5 行,我只有:

declare PropID float;

【问题讨论】:

mssql和mysql有很多语法差异 当然有。问题是:有时这些差异中的一个设法偷偷摸摸,然后我得到一个 1064,但没有说明问题是什么,或者问题在哪里。 那么,你完成了吗?你是怎么做到的,用了多长时间? 【参考方案1】:

Gartner Group 报告称,两种相似语言之间的手动转换以每天大约 150 行的速度发生。根据他们的说法,你的进度比平均水平略低 :- 更糟糕的是,它预测你有 150 个工作日的努力。

这就是人们构建自动迁移工具的原因,这些工具可以以常规且值得信赖的方式应用转换规则。如果你幸运的话,有人在你之前做过这件事。人们可能想要进行的从到转换对的数量是巨大的,比人们已经完成的设置要多得多,所以通常你不走运。

接下来有人会说“使用正则表达式”。这可能行不通,因为您必须找到编程语言结构,它们不是“常规”而是“无上下文”。

获得执行此操作的工具的一种方法是使用program transformations。这些是用另一个代码片段替换一个代码片段的编程操作。它们通常需要完整的语言解析器,以便操作可以像编译器一样对程序元素进行操作,而不是对文本字符串进行操作。

编写程序转换的好方法是使用语言的表面语法作为模式,本质上是“如果您看到 this,请将其替换为 that”。 将这些视为加强处理“无上下文”问题的“正则表达式”。

可以接受这种表面语法程序转换的工具, 是我们的DMS Software Reengineering Toolkit。

编写可信赖的转换代码需要付出一些努力。您有大约 15,000 行代码需要转换。当要转换的代码量如此之少时,在编码转换与简单地咬紧牙关和完成工作之间进行权衡是很困难的。

【讨论】:

【参考方案2】:

您正在从一个强大的工具移植到一个不太强大的工具。如果旧程序使用 MySQL 不支持的特性,这可能使移植几乎不可能。

可能有帮助的一点是,大多数 SQL Server 过程都实现了某种业务逻辑。好消息是,通常只使用其中的一小部分。过滤掉未使用的过程可以为您节省大量工作。

坏消息是业务程序必须在移植后进行测试;即使是最好的程序员也不能用不同的语言重写它们并确保它们有效。这意味着大量的测试工作,以及移植程序投入生产后的大量支持工作。

【讨论】:

【参考方案3】:

您可以尝试MySQL Query Browser 代替 MySQL 管理员:

MySQL 管理员在哪里 旨在管理 MySQL 服务器, MySQL 查询浏览器旨在 帮助您查询和分析存储的数据 在您的 MySQL 数据库中。

【讨论】:

以上是关于将 MS SQL 存储过程移植到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 MS Sql Server 存储过程导出到 excel 文件

MS SQL Server - 如何将所有存储过程从我的机器导出到我的朋友机器?

MySQL存储过程显示出一条sql执行用时?

mysql存储过程简介

将数据从 MS SQL 移动到 MySQL

mySQL 存储过程中未知的无效类型转换