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