当前位置:  开发笔记 > 数据库 > 正文

是否可以从SQL查询执行文本文件?

如何解决《是否可以从SQL查询执行文本文件?》经验,为你挑选了5个好方法。

我有许多生成的.sql文件,我想连续运行.我想从查询中的SQL语句(即查询分析器/服务器管理工​​作室)运行它们.
有可能做这样的事情,如果是这样的话,这样做的语法是什么?

我希望有类似的东西:

exec 'c:\temp\file01.sql' 
exec 'c:\temp\file02.sql'

我正在使用SQL Server 2005并在管理工作室中运行查询.



1> Gulzar Nazim..:

使用xp_cmdshell和sqlcmd

EXEC xp_cmdshell  'sqlcmd -S ' + @DBServerName + ' -d  ' + @DBName + ' -i ' + @FilePathName



2> 小智..:

非常有用,谢谢,请参阅此链接: 执行 类似示例的SQL Server脚本.打开xp_cmdshell和关闭如下:

SET NOCOUNT ON  
EXEC master.dbo.sp_configure 'show advanced options', 1 
RECONFIGURE 
EXEC master.dbo.sp_configure 'xp_cmdshell', 1 
RECONFIGURE 

EXEC master.dbo.sp_configure 'xp_cmdshell', 0 
RECONFIGURE 
EXEC master.dbo.sp_configure 'show advanced options', 0 
RECONFIGURE  
SET NOCOUNT OFF 



3> Bruce Thomps..:

这就是我使用的.效果很好,重用简单.可以将其更改为读取目录中的所有文件,但这样我就可以控制执行哪些文件.

/*  
execute a list of .sql files against the server and DB specified  
*/  
SET NOCOUNT ON  

SET XACT_ABORT ON  
BEGIN TRAN  

DECLARE @DBServerName   VARCHAR(100) = 'servername'  
DECLARE @DBName VARCHAR(100) = 'db name'  
DECLARE @FilePath   VARCHAR(200) = 'path to scrips\'  
/*

create a holder for all filenames to be executed  

*/  
DECLARE @FileList TABLE (Files NVARCHAR(MAX))  

INSERT INTO @FileList VALUES ('script 1.sql')  
INSERT INTO @FileList VALUES ('script 2.sql')  
INSERT INTO @FileList VALUES ('script X.sql')  

WHILE (SELECT COUNT(Files) FROM @FileList) > 0  
BEGIN  
   /*  
   execute each file one at a time  
   */  
   DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) Files FROM @FileList)  
   DECLARE @command  VARCHAR(500)  = 'sqlcmd -S ' + @DBServerName + ' -d  ' + @DBName + ' -i "' + @FilePath + @Filename +'"'  
   EXEC xp_cmdshell  @command   

   PRINT 'EXECUTED: ' + @FileName     
   DELETE FROM @FileList WHERE Files = @FileName  
END  
COMMIT TRAN  



4> 小智..:

或者只是使用openrowset将您的脚本读入变量并执行它(抱歉恢复一个8岁的主题):

DECLARE @SQL varchar(MAX)
SELECT @SQL = BulkColumn
FROM OPENROWSET
    (   BULK 'MeinPfad\MeinSkript.sql'
    ,   SINGLE_BLOB ) AS MYTABLE

--PRINT @sql
EXEC (@sql)



5> Mitch Wheat..:

我不建议这样做,但如果你真的需要,那么扩展存储过程xp_cmdshell就是你想要的.您必须先将文件内容读入变量,然后使用以下内容:

DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > var_out.txt'
EXEC master..xp_cmdshell @cmd

注意:xp_cmdshell在后台运行命令,因此,它不能用于运行需要用户输入的程序.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有