我有一个非常简单的数据库(只有几个简单的表)但非常大(大约 SQLite 中的 GiB)。在开发它时,我已尽我所能只使用非常标准的列类型:(INT, DOUBLE, CHAR, VARCHAR
但这些是 SQL Server 的NCHAR
并且NVARCHAR
用于代替 SQLite 的 UTF-8CHAR
和VARCHAR
)并且没有特定于 DBMS 的功能。
将数据库从 SQLite 转换为 SQL Server 并返回的最简单方法是什么?
我不介意手动定义目标数据库,而不是从源生成所有 DDL,但我寻求自动化数据迁移。
更新:
我发现自己最简单的方法是从 SQLite 导出
> sqlite3 mydb.sqlite
sqlite> .headers off
sqlite> .mode csv
sqlite> .output mytable.csv
sqlite> select * from `mytable`;
然后删除引号
tr -d \" < mytable.csv > mytable-plain.csv
从 Unix(LF 行尾)转换为 DOS(CR+LF 行尾)文本格式(作为tr
Unix 工具并输出 Unix)
unix2dos mytable-plain.csv
并将其导入 SQL ServerBULK INSERT
BULK
INSERT [dbo].[mytable]
FROM 'c:\mytable-plain.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO
假设已经在 SQL Server 架构中创建了相同的空表。
cygwin
需要在 Windowstr
上运行。unix2dos
我花了半个小时(在我的 Core 2 Duo 笔记本电脑上)将一个半 GiB 的 CSV 文件导入 SQL Server。
我仍然相信有一个更简单的方法。也许有一个 T-SQL 函数可以通过 ODBC 或从源数据库中选择并插入目标的程序来查询不同的数据源(我很难相信还没有人写过这样的)。