如何使用 sqlite3.exe 从导出的 .sql 脚本创建数据库
Posted
技术标签:
【中文标题】如何使用 sqlite3.exe 从导出的 .sql 脚本创建数据库【英文标题】:How to use sqlite3.exe to create database from exported .sql script 【发布时间】:2013-02-09 15:44:16 【问题描述】:尝试将 SqlCe 数据库转换为 SQLite,我将其导出到 .sql
文件。现在我将如何使用sqlite.exe
从这个.sql
文件创建数据库?
将sql3.exe
文件放在哪里?
在 cmd 提示符或sqlite.exe
shell 中使用什么命令语法?
【问题讨论】:
【参考方案1】:使用以下命令行:
sqlite3 -init dump.sql newsqlite.db ""
它将通过执行来自dump.sql
的语句来创建新的SQLite 数据库文件newsqlite.db
。 sqlite3自动退出需要空字符串""
。
如果newsqlite.db
文件已经存在一些数据,导入可能会失败,除非您对所有表和索引创建语句使用IF NOT EXISTS
。
【讨论】:
干杯!尽管如此,cmd 提示符还是给了我消息:-- Loading resources from script.sql
然后Error: incomplete SQL: |-
(| 成为一个矩形),而同一命令的 sqlite3.exe shell 只给我一个新行...>
无论哪种方式都没有太多错误消息,没有行号,什么都没有。这是典型的吗?
为此,您的script.sql
必须有效 - 显然不是。我建议逐行调试你的脚本。在 Windows 中,您应该安装 SQLite Expert Personal 并使用此 GUI 仔细调试您的脚本 - 其中有问题。
非常感谢您提供空字符串的提示!我花了大约。 4小时找到这个。为什么这没有为 Windows 用户正确记录?如果我理解语法正确,那么自动化任务就像这样: sqlite3.exe -init "[scriptname]" "[databasename]" ""【参考方案2】:
把sqlite3.exe
放在任何你想要的地方,只要你记得那个地方并且你可以从那里开始sqlite3
。
在命令提示符中将脚本应用于数据库(可能是新创建的):
sqlite3.exe my-new-db.somesuffix < myscript.sql
在交互式sqlite3
会话中执行脚本:
sqlite3.exe my-new-db.somesuffix
....
.read myscript.sql
....
这两种变体有时都是有效且可用的。 (注意:如果您的.sql
是为非sqlite 数据库生成的,我希望它需要进行一些更改才能在sqlite3
中工作。存储过程和用户定义函数之类的东西肯定会丢失)。
【讨论】:
谢谢!所以从 cmd 我得到Error: incomplete SQL: |-
,而从 sqlite3 shell 中,它只是在按下回车时提供了更多的....>
行,没有消息。无论如何都没有创建任何数据库文件。这就是我对错误消息的期望吗?
incomplete SQL
可能是sqlite和你的源数据库的语法差异造成的,不看代码是解决不了的。从 sqlite shell 中的....>
提示符开始,我认为您在read
之前省略了前导点。它应该是.read
而不仅仅是read
。 (为什么每个提问的人都对编辑答案中提供的命令感到如此自信?)
我没有编辑你的命令,但也许我没有正确使用它们。我应该在运行这些命令之前创建数据库吗?我似乎没有创建一个空数据库,或者在执行你在 sqlite3 会话中给出的第一行时不应该发生这种情况吗?或者如何从cmd创建一个空数据库?
数据库是在单个 成功 sql 语句之后创建的(即使是像 select 1 as result
这样的无操作语句——但它可以是大小为 0 的文件)。如果您愿意,您可以使用现有的空数据库,但每次调试脚本时最好从头开始(否则您将不得不解决先前尝试中已经存在的对象的问题:添加 DROP TABLE IF EXISTS...
before每个CREATE TABLE
等)。以上是关于如何使用 sqlite3.exe 从导出的 .sql 脚本创建数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用单个脚本自动打开 sqlite3.exe shell 并运行命令?