sql server:如何从另一个查询执行.sql?

时间:2013-05-21 18:25:18

标签: sql sql-server-2008

我有一个.sql脚本,其中包含许多可用于某些临时表的操作查询。这个脚本需要在其间使用其他命令运行两次,即:

  1. 从源A加载登台表
  2. 使用do_stuff.sql处理
  3. 将结果移到某处。
  4. 对源B重复步骤1-3。
  5. 蛮力的方法是复制& amp;根据需要粘贴dostuff.sql。虽然这在技术上有用,但还有更好的方法吗?

    我希望有一个我尚未发现的RunThisSQL 'C:\do_stuff.sql'命令。

    更新

    嗯,这已经有5年了,我刚刚重新发现了这个老问题。我最近这样做了,并使光标通过主表循环。对于该主表中的每个记录,该脚本使用主表设置的变量运行内部脚本。

    https://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/

4 个答案:

答案 0 :(得分:2)

如果使用visual studio,则可以创建“Sql Server Database”项目。在项目中,您可以创建脚本,以便以某种方式执行* .sql文件

 /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

另见。 http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

答案 1 :(得分:2)

尝试使用xp_cmdshell。

 EXEC xp_cmdshell  'sqlcmd -S ' + @ServerName + ' -d ' + @DBName + ' -i ' +@FileName

答案 2 :(得分:1)

xp_cmdshell和串联不能很好地配合使用,通常会导致“'+'附近的语法不正确”错误。因此,除了上述Jeotics解决方案之外,您还需要对传递给xp_cmdshell的整个字符串做一个变量(包括可能包含空格的任何内容的引号(例如filepath \ filename)。在Microsoft文档中对此进行了提及) xp_cmdshell here。您还需要解决的其他问题是为SQL Server设置的默认设置,该设置已按照概述here禁用了xp_cmdshell,并向非系统管理员授予了使用概述{{3}的xp_cmdshell的权限}。该文档通常建议不要将xp_cmdshell权限授予过多的人,因为它是有缺陷的人的工具,但如果像我一样,您的数据库用户最少且值得信赖,那么这似乎是一个合理的解决方案。正确的配置是here所述的SQL Server代理。文档概述了SQL代理负责后台调度(例如备份)和命令行语句的性能等。

DECLARE
    @Server nvarchar (50)
    ,@Database nvarchar(50)
    ,@File nvarchar(100)
    ,@cmd nvarchar(300);

SET @Server = server_name;
SET @Database = database_name;
SET @File = 'C:\your file path with spaces';
SET @cmd = 'sqlcmd -S ' + @Server + ' -d ' + @Database + ' i "' + @File + '"';

EXEC xp_cmdshell @cmd;

答案 3 :(得分:1)

在SQL Server中启用xp_cmdshell存在一些安全问题。您可以创建CLR存储过程,该过程执行传递的文件内容。此CLR存储过程是专门用于此目的的,与xp_cmdshell不同,xp_cmdshell可以在命令提示符下执行任何操作。

issues with enabling xp_cmdshell

Create CLR stored procedure