我好几天都在苦苦挣扎。 我有一个应用程序,它使用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]数据库执行。
如果我使用数据库创建语句包含或创建另一个脚本,我无法告诉数据库应该使用的其他脚本。
任何想法??
最好的问候.-
答案 0 :(得分:1)
我强烈建议你只使用VS中的SSDT(SQL Server数据工具)将数据库转换为数据库项目。这将让VS做所有繁重的工作,更不用说其他很酷的功能,比如schema&数据比较。
看一下如何转换数据库。这将为您为每个数据库对象创建单独的脚本。尝试一下只需要很短的时间。 Creating a SQL Server Database Project in VS2012