如何在SSMS中针对SQL Azure运行多个SQL脚本?

时间:2015-03-31 23:05:07

标签: azure-sql-database

我想在SSMS中针对SQL Azure DB执行多个SQL(* .sql)TSQL脚本文件。我碰巧使用的是SSMS 2008 R2

代码,我试图在SSMS查询窗口中执行,链接到相关数据库实例,从之前的SO问题中获取,是:

/*  
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) = 'DBServerName '  
DECLARE @DBName VARCHAR(100) = 'DBName'  
DECLARE @FilePath   VARCHAR(200) = 'c:\temp\scripts'  
/*

create a holder for all filenames to be executed  

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

INSERT INTO @FileList VALUES ('script1.Sql')  
INSERT INTO @FileList VALUES ('script2.Sql') 
INSERT INTO @FileList VALUES ('script3.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 

不幸的是,SQL Azure不支持“xp_cmdshell”。

如何为Azure SQL实例执行多个SQL脚本?

提前致谢。

P.S我知道如何在SSMS中打开文件

1 个答案:

答案 0 :(得分:2)

使用SSMS时,脚本会发送到服务器,然后在那里执行。正如我在SQL数据库中的注释中所提到的,服务器无法访问托管它们的计算机上的文件,也无法将它们实际上载到这些计算机上。所以你的方法不起作用。也无法在机器上打开本地文件。

要从本地计算机对SQL数据库执行一组脚本,您必须将SQL脚本转换为PowerShell脚本:

Get-ChildItem "c:\temp\scripts" -Filter script*.sql | `
Foreach-Object{
    Write-Host 'Executing' $_.FullName
    sqlcmd -U <username>@<server> -P <Password> -S <server>.database.windows.net -d <DatabaseName> -i $_.FullName
}