如何在MS SQL中将一个SQL文件包含到另一个SQL文件中?

19
我们有一些从实体模型生成的SQL脚本,需要按特定顺序运行。此外,还有几个填充脚本将测试数据插入到数据库中。
目前,我需要在Visual Studio中打开每个脚本,并通过单击“执行”(ctrl shift E)以正确的顺序执行它们。
是否有办法创建一个类似于Master.sql的脚本,其中包含如下内容的包含指令:
BEGIN TRANSACTION

ImportOrInclude myDB1.sql
ImportOrInclude myDB2.sql
...

COMMIT

这只是在 Visual Studio 中运行所需的,并不是应用程序本身的一部分。

如何实现这一点?

编辑1

我发现有一种叫做 SQLCMD 脚本的东西可以导入 SQL 文件:http://msdn.microsoft.com/en-us/library/aa833281%28v=vs.80%29.aspx

但我的问题是如何将当前解决方案的目录路径传递到:r命令中。

编辑2

所以,我找到了方法,虽然不完美,但它确实有效。缺点是 $(SolutionDir) 没有从 Visual Studio 变量中加载,因此您需要手动设置它。 这段代码旨在在 Visual Studio 中运行:

-- turn on in menu: Data -> Transact SQL editor -> SQL CMD mode
-- set this to path where the .sln file is.
:setvar SolutionDir C:\_work\projectname\

:!! echo $(SolutionDir)Maa.EntityModel.All\DbWEntityModel.edmx.sql 
:r $(SolutionDir)Maa.EntityModel.All\DbWEntityModel.edmx.sql 
go

:!! echo $(SolutionDir)Maa.EntityModel.All\DblQEntityModel.edmx.sql 
:r $(SolutionDir)Maa.EntityModel.All\DbQEntityModel.edmx.sql 
go
2个回答

17

使用 sqlcmd 实用程序

以下是您可能感兴趣的提取内容:

-i input_file[,input_file2...]

标识包含一批SQL语句或存储过程的文件。可以指定多个文件,按顺序读取和处理。文件名之间不要使用任何空格。sqlcmd将首先检查所有指定的文件是否存在。如果有一个或多个文件不存在,则sqlcmd将退出。

示例:

sqlcmd -dDataBaseName -E -Stcp:ServerName\instancename -imaster.sql

主控.Sql:

:r file1.sql
:r file2.sql

当然可以,我刚刚测试过了。 - Nikola Markovinović
我尝试使用Visual Studio中包含的SQL命令,但它的工作方式不同。 - Jiří Herník
现在它正常工作了 ;) 但是非常缺少$(SolutionDir)变量。 - Jiří Herník

2
使用随附SQL Server的Business Intelligence Development Studio来完成此操作。创建一个新的SSIS包。在此包内,为每个文件创建多个Execute SQL Tasks,并在控制流中将SQLSourceType设置为FileConnection,选择您的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接