如何从 SSMS 中执行一组 .SQL 文件?

问题描述 投票:0回答:4

如何从 SQL Server Management Studio 中执行一组 .SQL 文件(每个文件都进行一些数据转换)?

还有什么其他方法可以批量执行 .SQL 文件?

sql-server batch-file ssms
4个回答
99
投票

虽然 SQLCMD.exe 是最好的方法,但 SSMS 还具有 SQLCMD 模式,您可以在其中执行 SQLCMD 脚本。要启用此模式,请单击菜单栏中的查询,然后选择SQLCMD模式

“:r filename.sql”命令是SQLCMD脚本命令,用于导入并执行sql脚本文件。您知道您处于 SQLCMD 模式,因为 SQLCMD 脚本命令的任何行都会以彩色(我认为是灰色)背景显示。

:setvar path "c:\Path_to_scripts\"
:r $(path)\file1.sql
:r $(path)\file2.sql

30
投票

使用SqlCmd.exe

对于示例

sqlcmd -S myServer\instanceName -i C:\myScript.sql

或将输出保存到文件中:

sqlcmd -S myServer\instanceName -i C:\myScript.sql -o C:\EmpAdds.txt

3
投票

您可以在不使用 SQLCMD 模式或在 SSMS 之外使用 SQLCMD 的情况下执行 T-SQL 文件,如下所示:

exec sp_configure 'show advanced options',1;reconfigure with override;
exec sp_configure 'xp_cmdshell',1;reconfigure with override;

declare @sqlfile nvarchar(100),@sqlcmd varchar(4000)

exec xp_cmdshell 'del c:\SQLscript.sql && echo select ''This Is a script running on SQLCMD from SSMS'' >> c:\SQLscript.sql',no_output --test script

set @sqlfile = 'c:\SQLscript.sql' --script location
set @sqlcmd = 'sqlcmd -E -i '+@sqlfile 

exec xp_cmdshell @sqlcmd --executing script

exec sp_configure 'xp_cmdshell',0;reconfigure with override;
exec sp_configure 'show advanced options',0;reconfigure with override;

0
投票

这是波塞冬答案的附录:

您可能有理由保留“xp_cmdshell”的状态,甚至“显示高级选项”配置设置,这样,如果它们事先打开或关闭,它们会在之后切换(而不是总是关闭它们)。这是我编写的一对(过度设计的)块,它们将保留两个块的状态作为临时表,然后如果它们存在,它将在之后将设置设置回来。这样做的优点是不受 GO 影响,因此它将在整个会话和多个批次中持续存在。不过,这些是本地临时表,因此必须是检查 AFTER 块的同一会话。您可以用它作为书挡包装您的脚本,也可以只运行 before 块,执行您需要执行的操作(在同一窗口或另一个窗口中,设置是服务器范围的),然后在同一会话中运行 before 块关闭。

-- BEFORE
IF (SELECT TOP 1 CAST([value] AS INT) FROM sys.configurations WHERE [name] = 'xp_cmdshell') <> 1
        -- xp_cmdshell is configured off, need to reconfigure to run
    BEGIN
        IF(OBJECT_ID('tempdb.dbo.#xp_cmdshell_disabled') IS NOT NULL)
            DROP TABLE #xp_cmdshell_disabled
        CREATE TABLE #xp_cmdshell_disabled (placeholder bit)

        IF (SELECT TOP 1 CAST([value] AS int) FROM sys.configurations WHERE [name] = 'Show Advanced Options') <> 1
            -- advanced options is off, must be reconfigured in order to enable xp_cmdshell
            BEGIN
                IF(OBJECT_ID('tempdb.dbo.#advanced_options_disabled') IS NOT NULL)
                    DROP TABLE #advanced_options_disabled
                CREATE TABLE #advanced_options_disabled (placeholder bit)
            
                EXEC sp_configure 'Show Advanced Options', 1
                RECONFIGURE
            END

        EXEC sp_configure 'xp_cmdshell', 1
        RECONFIGURE
    END

-- AFTER
BEGIN
    IF(OBJECT_ID('tempdb.dbo.#xp_cmdshell_disabled') IS NOT NULL)
    -- xp_cmdshell was previously off, let's turn it back off per site configuration.
        BEGIN
            EXEC sp_configure 'xp_cmdshell', 0
            RECONFIGURE
            IF(OBJECT_ID('tempdb.dbo.#xp_cmdshell_disabled') IS NOT NULL)
                DROP TABLE #xp_cmdshell_disabled
            IF(OBJECT_ID('tempdb.dbo.#advanced_options_disabled') IS NOT NULL)
                BEGIN
                    EXEC sp_configure 'Show Advanced Options', 0
                    RECONFIGURE
                    IF(OBJECT_ID('tempdb.dbo.#advanced_options_disabled') IS NOT NULL)
                        DROP TABLE #advanced_options_disabled
                END
        END
END
© www.soinside.com 2019 - 2024. All rights reserved.