【问题标题】:How to include an sql file within another sql file in MS SQL?如何在 MS SQL 的另一个 sql 文件中包含一个 sql 文件?
【发布时间】:2012-03-07 09:58:25
【问题描述】:

我们有几个从实体模型生成的 SQL 脚本。它们需要按特定顺序运行。此外,还有几个填充脚本可以将测试数据插入数据库。

目前我需要在 Visual Studio 中打开每个脚本并通过单击Execute(ctrl shift E)以正确的顺序执行它们。

有没有办法创建像Master.sql 这样的脚本,其中包含如下内容:

BEGIN TRANSACTION

ImportOrInclude myDB1.sql
ImportOrInclude myDB2.sql
...

COMMIT

这仅需要在 Visual Studio 中运行,不会成为应用程序本身的一部分。

如何做到这一点?

编辑 1

我发现有一个叫做 SQLCMD Scripts 的东西可以导入 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

【问题讨论】:

    标签: sql-server visual-studio tsql


    【解决方案1】:

    Use sqlcmd utility.

    提取您可能会感兴趣的内容:

    -i input_file[,input_file2...]
    

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

    例子:

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

    Master.Sql:

    :r file1.sql
    :r file2.sql
    

    【讨论】:

    • 当然可以,我刚刚测试过了。
    • 我尝试使用 Visual Studio 中包含的 sql 命令,但它的工作方式不同
    • 现在一切正常 ;) 但是缺少 $(SolutionDir) 变量。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2010-10-31
      • 2010-11-26
      相关资源
      最近更新 更多