如何从几个脚本文件创建SQL-SERVER数据库?

时间:2017-11-29 19:50:43

标签: sql-server sqlcmd

我好几天都在苦苦挣扎。 我有一个应用程序,它使用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]数据库执行。

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

任何想法??

最好的问候.-

1 个答案:

答案 0 :(得分:1)

我强烈建议你只使用VS中的SSDT(SQL Server数据工具)将数据库转换为数据库项目。这将让VS做所有繁重的工作,更不用说其他很酷的功能,比如schema&数据比较。

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