如何:从脚本导入数据库对象
除了能够从现有数据库导入数据库架构之外,还可以从现有的一个或多个脚本导入数据库对象。 例如,可以使用此方法获得通过使用其他第三方工具创建的现有数据库定义,并将其导入数据库项目。 将分析指定的脚本,识别创建数据库对象的所有语句并将这些语句导入数据库项目。 可以使用“导入 SQL 脚本文件”向导或通过在命令窗口中使用自动化命令来导入脚本。
如果有任何对象的定义中包含错误,则将跳过该对象。 如果该错误与类型定义有关,则会在数据库项目中的 ScriptsIgnoredOnImport.sql 文件中放入一条语句。 如果对象类型有效,但是对象的定义中包含错误(例如,视图引用的表不存在),则会在**“错误列表”**窗口中显示一条错误消息。
未导入的语句将放入解决方案中的 ScriptsIgnoredOnImport.sql 文件中。
导入数据库对象定义
使用“导入 SQL 脚本文件”向导
在**“项目”菜单上,单击“导入脚本”**。
将出现**“导入 SQL 脚本文件”**向导。
提示
还可以在“解决方案资源管理器”或“架构视图”中右击数据库项目,然后单击“导入脚本”。
阅读向导的简介页后,单击**“下一步”前进到“选择文件”**页。
如果要导入多个脚本,请转到步骤 7。
单击**“单个文件”**。
在**“文件名”中键入文件名,包括要导入的脚本的路径。 也可以单击“浏览”**找到该文件。
转到步骤 11。
单击**“多个文件”**。
单击**“浏览”**选项卡,导航到包含要导入的脚本的文件夹。
重要事项 您需要选择包含要导入的脚本的文件夹,而不是选择脚本本身。
单击**“选择文件夹”**。
在文件和文件夹的列表中,选中与脚本或包含要导入的脚本的子文件夹对应的复选框。
单击**“下一步”**。
如果希望用导入的对象来替换数据库项目中具有相同名称和类型的对象,请选中**“覆盖项目中已存在的对象”**复选框。
如果您不希望导入扩展属性,请清除**“导入扩展属性”**复选框。
如果要导入权限,请选中**“导入权限”**复选框。
如果要导入权限并将其添加到项目模型中,则还必须选中**“将导入的权限添加到项目模型”**复选框。
提示
如果导入权限并将其添加到模型中,则打开数据库项目所需的时间可能会显著增加。
在**“编码”**中,单击用来创建脚本文件的编码。
单击**“完成”**从指定的脚本导入数据库对象定义。
分析脚本并将所有对象定义添加到数据库项目时,会显示进度页。 当从脚本中导入数据库定义时会创建一个日志文件。 日志文件存储在项目文件夹中的“导入脚本日志”子文件夹内。
提示
不能修改源文件,在共享只读模式下打开源文件。
使用 Visual Studio 自动化模型
创建或打开一个数据库项目。
有关更多信息,请参见如何:创建空的数据库项目和服务器项目或如何:打开数据库或服务器项目。
打开**“视图”菜单,指向“其他窗口”,然后单击“命令窗口”**。
在命令窗口中,键入下面的命令:
Project.ImportScript /FileName "MyScript.sql"
用要导入的脚本的名称替换 MyScript.sql。
提示
可以为控制导入操作的命令指定其他选项。 有关更多信息,请参见 Visual Studio 数据库功能的自动化命令参考。 如果不指定文件名,则会出现“导入数据库向导”。
对象和设置将会从指定的脚本导入到您在执行导入命令时在**“解决方案资源管理器”**中选择的项目中。 **“错误列表”**窗口中显示与导入脚本时所创建的对象有关的任何错误。
此时,必须配置数据库项目设置后才能生成和部署数据库项目。 有关更多信息,请参见如何:为数据库项目配置数据库属性。
问题和局限性
“导入 SQL 脚本文件”向导在指定的脚本中搜索所有的数据定义语言 (DLL) CREATE 语句,并将相应的对象添加到项目中。 但存在以下局限性:
无法识别的语句将放入数据库项目中的 ScriptsIgnoredOnImport.sql 文件中。
假设脚本中包含单个数据库中的对象的定义。 所有的对象都将导入到当前的数据库项目中。 如果脚本中包含多个数据库的定义,则 CREATE DATABASE 和 USE 语句将被忽略,并且所有的对象都将添加到数据库项目中。 如果要创建多个数据库项目,则必须手动拆分该文件,以便每个数据库都有一个文件,然后将每个文件分别导入各自的数据库项目中。 如果将具有多个数据库定义的脚本导入单个数据库项目中,则可能会收到大量的错误。
添加文件组的 ALTER DATABASE 语句也将导入。 如果脚本中包含一个 CREATE 语句,并且该语句后面是已创建对象的 DROP 语句,则该对象将被导入。
仅导入向表中添加约束或者为全文索引指定列的 ALTER TABLE 语句。 对于约束而言,只有那些添加单个约束的语句才可以被识别。 向表中添加多个约束的语句将被跳过。
不同的批处理必须用 GO 语句隔开。
提示
若要导入脚本的运行结果,而不导入脚本中包含的 CREATE 语句,可以运行脚本来创建数据库,然后使用“导入数据库架构”命令来导入生成的数据库。