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 来完成连接+.
控制台提供即时解决方案,提供快速可靠的SQL查询转换实用程序,可加速迁移.控制台支持跨Oracle,SQL Server,IBM DB2,MySQL,Sybase,PostgreSQL,Informix和Netezza数据库的迁移.该软件还具有测试目标数据库中转换的SQL的功能.
首先,您需要了解并理解每个 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 和元数据创建这样的硬东西不会一样。
我希望它有帮助,
祝你好运
| 归档时间: |
|
| 查看次数: |
4373 次 |
| 最近记录: |