转换不同数据库的SQL查询

Thu*_*der 10 .net c# sql database

是否有工具可以从一个数据库的一个SQL查询转换为另一个数据库?

对于SQLite

> CREATE TABLE ConstantValues(    Id int
> AUTOINCREMENT primary key   ,
> VariableName varchar(50)    , Values
> varchar(150) )
Run Code Online (Sandbox Code Playgroud)

对于SQL Server

> CREATE TABLE ConstantValues(    Id
> INTEGER identity(1,1) primary key   ,
> VariableName varchar(50)   , Values
> varchar(150) )
Run Code Online (Sandbox Code Playgroud)

同样,Oracle和SQL Server也不同.同样在外键约束声明中,如果有一个工具,以便我们可以从任何数据库获取SQL到任何数据库,那对我来说真的很有帮助.

我已经创建了这样的函数,但它似乎不是一个好的解决方案:

private string changeSQL(string sql)
{
    switch (dbtype)
    {
        case dbType.SQLite:
            sql = sql.Replace(" int ", " INTEGER ");
            sql = sql.Replace(" identity(1,1) ", " AUTOINCREMENT ");
            break;
        case dbType.MsAscess:
            sql = sql.Replace(" int ", " ");
            sql = sql.Replace(" identity(1,1) ", "");
            sql = sql.Replace("AUTOINCREMENT", "AUTOINCREMENT");

            break;
    }
    return (sql);
}
Run Code Online (Sandbox Code Playgroud)

类似地,对于SQLite,使用||在SQL Server中使用while 来完成连接+.

Pra*_*ana 6

SwisSQL控制台5.0

控制台提供即时解决方案,提供快速可靠的SQL查询转换实用程序,可加速迁移.控制台支持跨Oracle,SQL Server,IBM DB2,MySQL,Sybase,PostgreSQL,Informix和Netezza数据库的迁移.该软件还具有测试目标数据库中转换的SQL的功能.

  • 该链接不再有效。TLD 显示与 https://www.manageengine.com 相同的内容。这一领域似乎发生了一系列收购。是否还有一个派生产品可以执行与 SwisSQL 过去相同的功能? (2认同)

Ale*_*zzo 5

首先,您需要了解并理解每个 SQL 引擎都使用不同的 SQL 语法。尽管有 SQL ANSI 标准,但地球上没有任何语言 100% 尊重它。此外,每个大型和已知的 SQL 引擎都会在原始语法中添加自己的方法和内容。

所以,如果要做转换,最简单的方法就是实现一个中间的SQL层。这意味着,从每个众所周知的 SQL 引擎中非常常见的功能中创建一个不可知的 SQL 语法(这将导致类似于 SQL ansi 的东西加上每个引擎中存在的每个功能,比如 TOP)。一旦你有了这个,你必须转换到这个中间层,并从这个中间层转换你需要的每个 SQL 变体。

我告诉你这个是因为我在工作中需要这个确切的东西,这是真正实现它并使其可重用的唯一方法。拥有一个工具可以让您真正手动转换每个查询,并制作巨大的 SWITCH 来选择查询,或者为每个引擎拥有一个继承的类。

我告诉你我做了什么:我创建了我的 SQL 中间语法的 BNF,然后用 GoldParser 为 C# 创建了一个树解析器。然后,我为要转换为每种 SQL 方言的语法中的每个规则创建了单独的规则。我知道,这是一项艰巨而乏味的工作。但他们付钱让我去做...

如果您没有时间完成此操作,则可以使用 ODBC。每个 SQL 引擎都有一个 ODBC 连接器,而 ODBC 本身将充当中间抽象层。但是,它并不像听起来那么愉快,因为只有简单的查询才能保持这种错觉……像 UNION、JOIN 和元数据创建这样的硬东西不会一样。

我希望它有帮助,

祝你好运