【问题标题】:How to create a SQL-SERVER database from several script files?如何从多个脚本文件创建 SQL-SERVER 数据库?
【发布时间】:2017-11-29 19:50:43
【问题描述】:

我已经为此苦苦挣扎了好几天。 我有一个应用程序使用 SQL SERVER 数据库来存储它的数据。 这个数据库有几个表、存储过程、函数和视图。 我曾经为部署生成一个大型数据库创建脚本。 现在,我希望每个对象有一个脚本/文件,以及一个运行所有这些脚本的主脚本。 使用 sqlcmd 模式,我制作了一个脚本,列出了路径中的所有文件,并创建了另一个文件,执行该路径中的所有文件。

    --DECLARE PATH
    :SETVAR WorkDir     "C:\scripts\"

    --DECLARE TMP FILES
    :SETVAR WorkFile "listing.tmp"
    :SETVAR RunFile "final_script.txt"

    --DELETE PREVIOUS FILE IF EXISTS
    !!IF EXIST $(WorkDir)$(RunFile) DEL $(WorkDir)$(RunFile)
    !!IF EXIST $(WorkDir)$(WorkFile) DEL $(WorkDir)$(WorkFile)

    --REDIRECT OUT TO WORK FILE
    :OUT $(WorkDir)$(WorkFile)

    --LIST ALL SQL FILES
    !!DIR $(WorkDir)"*.sql" /b/o

    --APPEND EXECUTE COMMAND
    !!FOR /F "usebackq tokens=*" %a in (`dir /b $(WorkDir)*.sql /on`) DO ( @ECHO :r "$(WorkDir)%a">> $(WorkDir)$(RunFile) )

    --EXECUTE "final_script"
    :r $(WorkDir)$(RunFile)

此脚本将生成另一个脚本,其中包含如下内容:

    -r: c:\scripts\script_01.sql
    -r: c:\scripts\script_02.sql
    -r: c:\scripts\script_03.sql
    -r: c:\scripts\script_04.sql

我遇到的问题是: 我找不到如何自动创建数据库。 我想在此脚本中设置数据库名称,并从路径脚本中删除对数据库名称的任何引用。

我可以更改此脚本,以便将 CREATE DATABASE 语句附加到最终脚本中,以获得类似的内容

    CREATE DATABASE [MYDB]
    GO
    USE [MYDB]
    GO
    -r: c:\scripts\script_01.sql
    -r: c:\scripts\script_02.sql
    -r: c:\scripts\script_03.sql
    -r: c:\scripts\script_04.sql

但是,-r 语句会在创建数据库之前执行,脚本会使用 [master] 数据库执行。

如果我在数据库创建语句中包含或创建另一个脚本,我无法告诉数据库应该使用的其他脚本。

有什么想法吗??

最好的问候。-

【问题讨论】:

    标签: sql-server sqlcmd


    【解决方案1】:

    我强烈建议您在 VS 中使用 SSDT (SQL Server Data Tools) 将您的数据库转换为数据库项目。这将让 VS 完成所有繁重的工作,更不用说架构和数据比较等其他很酷的功能了。

    在此处查看如何转换您的数据库。这将为您的每个数据库对象创建单独的脚本。试一试只需要很短的时间。 Creating a SQL Server Database Project in VS2012

    【讨论】:

    • 谢谢@Frobozz!我正在研究数据库项目,我可以自动化很多我以前手动完成的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多