2015-03-31 71 views
2

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

的代码,我想在一个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

您不能存储或托管的机器访问文件的SQL数据库。所以试图在服务器端做到这一点是行不通的。您需要从客户端运行此操作,例如使用PowerShell遍历文件并使用sqlcmd执行它们。 – 2015-03-31 23:42:23

+0

@JanEngelsberg,谢谢你。我试图在安装了SSMS的客户端电脑上运行此操作,并从中访问并查询我的SQL Azure实例。我希望我可以运行一个调用其他脚本的SQL脚本。我知道我可以打开每个脚本文件并单独运行,但我希望能够使这个过程更高效一些。 – SamJolly 2015-03-31 23:51:03

回答

2

文件时使用SSMS脚本被发送到服务器,然后在那里执行。正如我在SQL数据库中的评论中所提到的那样,服务器不能访问托管机器上的文件,也不能将它们上传到这些机器上。所以你的方法不起作用。在本地机器上打开文件也是不可能的。

从本地计算机上执行一组脚本来对付你必须例如您的SQL脚本转换为PowerShell脚本SQL数据库:

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 
} 
+0

好的,谢谢,我现在明白了。 – SamJolly 2015-04-02 08:29:39

+0

快速注释:我添加了“-P”选项和密码以使其工作。命令然后是:'sqlcmd -U @ -P -S .database.windows.net -d -i $ _。FullName' – 2015-05-05 12:33:32