将 SQL Server 数据库转换为 SQLite 数据库






4.94/5 (238投票s)
一个 C# 实用程序,

引言
作为一个数据库迁移项目的一部分,我需要将现有的 SQL Server 数据库转换为 SQLite 数据库,但找不到任何体面的免费转换器来完成这项工作。
这是我解决这个问题的尝试。不过,我得警告你,我没有太多时间在太多数据库上进行测试。无论如何,源代码都有很好的文档记录,易于理解,所以如果你遇到问题,应该很容易修复。(请将修复后的源代码发给我。如果你这样做,我可以更新软件,让每个人都能享受到它。)
Using the Code
代码分为两个项目:一个数据访问项目(类库),其中包含实际的转换代码;一个转换器项目(WinForms),它驱动转换代码并提供简单的用户交互界面。
执行转换的主要类是 sqlservertosqlite
类。它通过执行以下步骤来完成转换:
- 读取指定的 SQL Server 架构,并准备一个
tableschema
对象列表,该列表包含每个 SQL Server 表(以及索引等相关结构)的架构。 - 使用从 SQL Server 读取的架构准备一个空的 SQLite 数据库文件。在此步骤中,代码可能会修改一些 SQL Server 类型,这些类型在 SQLite 中不直接支持。
- 将每个表的数据行从 SQL Server 数据库复制到 SQLite 数据库。
基本上就是这样!
关注点
为了读取 SQL Server 数据库架构,我主要使用了伪 information_schema.table
表。如果你想了解更多信息,可以在网上搜索。
历史
- 2008 年 6 月 13 日:初始版本
- 2008 年 7 月 8 日:v 1.2
- 修复了一个在某些情况下导致唯一索引被生成为非唯一索引的错误
- 2008 年 7 月 8 日:v 1.3
- 修复了一个在处理索引信息时导致实用程序有时崩溃的错误
- 2008 年 7 月 17 日:v 1.4
- 修复了一个在极少数情况下导致错误列成为主键的错误,并提高了转换性能
- 2008 年 7 月 20 日:v 1.5
- 增加了对不区分大小写的列的支持(
COLLATE NOCASE
)
- 增加了对不区分大小写的列的支持(
- 2008 年 7 月 22 日:v 1.6
- 增加了对加密结果数据库文件的支持(使用 SQLite .NET 提供程序中内置的加密支持)
- 2008 年 10 月 5 日:v 1.7
- 修复了
information_schema
引用,使其使用大写字母以解决国际字符集问题(土耳其语)
- 修复了
- 2008 年 12 月 14 日:v1.8
- 集成了 Yogesh Jagota 对外键的修改支持
- 合并了选择性表导入的支持
- 2009 年 2 月 21 日:v1.9
- 添加了 johnny dickson cano 的贡献,允许使用 SQL Server 集成身份验证或使用用户名/密码进行选择
- 增加了对将
IDENTITY
列转换为 SQLite 的AUTOINCREMENT
的支持(Paul Shaffer 的建议)
- 2009 年 3 月 4 日:v1.10
- 修复了一个导致转换器在遇到原始 SQL Server 架构中的 datetime 字段时崩溃的错误。感谢 bmcclint 发送了带有正确 bugfix 的 bug。
- 2009 年 5 月 23 日:v1.11
- 增加了使用触发器模拟外键的支持(由 Martijn Muurman 贡献)
- 添加了一个小的 bugfix,以便现在 '
int
' 类型始终转换为 'integer
' 类型。这是必需的,因为 SQLite 仅在 'integer
' 列类型上自动递增。
- 2009 年 6 月 4 日:v1.12
- 修复了触发器生成代码中的一个错误,该错误在多列引用外表中的同一列时导致架构生成失败
- 2009 年 9 月 20 日:v1.13
- 修复了 MAEP 建议的
AUTOINCREMENT
错误 - 修复了 64 位支持问题(感谢 Murry Gammash)
- 增加了对转换 SQL Server 视图的支持(Richard Thurgood 的建议)
- 修复了 MAEP 建议的
- 2009 年 9 月 22 日:v1.14
- 修复了一个关键错误,该错误导致在某些使用 [dbo] 表示法的 SQL Server 数据库上转换过程失败。
- 2009 年 9 月 25 日:v1.15
- 修复了一个关键错误,该错误导致主键被丢弃
- 修复了触发器生成错误
- 2009 年 12 月 4 日:v1.16
- 修复了生成代码,为 SQL Server 的
uniqueidentifier
类型创建 GUID 类型(而不是像以前那样使用nvarchar
) - 更新了解决方案以使用最新的 SQLite .NET 提供程序库
- 修复了生成代码,为 SQL Server 的
- 2011 年 3 月 24 日
- 附带了项目的编译版本,供所有没有 Visual Studio 但仍需要使用该实用程序的人使用
- 2011 年 7 月 1 日
- 更新了二进制 zip,因为之前的 zip 文件缺少应用程序所需的 DLL 文件
- 2011 年 11 月 15 日:v1.17
- 修复了一个导致软件在遇到 SQL Server 元数据表中的
NULL
值时崩溃的错误
- 修复了一个导致软件在遇到 SQL Server 元数据表中的
- 2012 年 6 月 19 日:v1.19
- 增加了在创建数据库架构时忽略视图的支持,增加了对列名中空格字符的支持。
- 2013 年 1 月 14 日:v1.20
- 修复了与列名相关的问题
- 增加了数据库名称组合框的宽度。