如何在 SSMS 中针对 SQL Azure 运行 多个 SQL 脚本?
How to run multiple SQL scripts, in SSMS, against SQL Azure?
我想在 SSMS 中针对 SQL Azure 数据库执行多个 SQL (*.sql) TSQL 脚本文件。我碰巧使用的是 SSMS 2008 R2
我尝试在 SSMS 查询 window 中执行的代码,链接到相关的数据库实例,从之前的 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 中打开文件
当使用 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
}
我想在 SSMS 中针对 SQL Azure 数据库执行多个 SQL (*.sql) TSQL 脚本文件。我碰巧使用的是 SSMS 2008 R2
我尝试在 SSMS 查询 window 中执行的代码,链接到相关的数据库实例,从之前的 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 中打开文件
当使用 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
}