SQL Server Management Studio - 执行其他脚本的脚本?

时间:2013-04-05 14:14:44

标签: sql sql-server ssms

所以我一直在寻找一种方法来开发一个脚本,该脚本将使用SQL Server Management Studio从我的项目文件夹中执行其他脚本,到目前为止还没有其他解决方案有效。我尝试编写一个包含sqlcommandline内容的脚本:

sqlcmd -S.\SQLExpress -imyScript.sql; 

这不起作用,根据我对@\path\to\script.sql的理解不会有任何其他想法吗?或者我应该开始考虑编写程序?在哪种情况下,有人能指出我正确的方向吗?

提前感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

就个人而言,我会考虑编写存储过程。 MSDN documentation很好,如果你进行快速搜索,网上有很多资源。

或者你可以做这样的事情来实现它(你需要有权执行命令shell等):

CREATE TABLE ##SQLFiles ( SQLFileName VARCHAR(2000))
GO

INSERT INTO ##SQLFiles
EXECUTE master.dbo.xp_cmdshell 'dir /b "C:\SQL Scripts\*.sql"'
GO

DECLARE cFiles CURSOR LOCAL FOR
    SELECT DISTINCT [SQLFileName]
    FROM ##SQLFiles
    WHERE [SQLFileName] IS NOT NULL AND
          [SQLFileName] != 'NULL'
    ORDER BY [SQLFileName]

DECLARE @vFileName            VARCHAR(200)
DECLARE @vSQLStmt             VARCHAR(4000)

OPEN cFiles
FETCH NEXT FROM cFiles INTO @vFileName
WHILE @@FETCH_STATUS = 0
BEGIN
    -- The following SET command must be on a single line or else an error will be generated.
    -- It is split in this script for readability purposes.
    SET @vSQLStmt = 'master.dbo.xp_cmdshell ''osql -S Server Name -U User Name -P Password
                     -d Database Name -i "C:\SQL Scripts\' + @vFileName + '"'''
    EXECUTE (@vSQLStmt)

    FETCH NEXT FROM cFiles INTO @vFileName
END

CLOSE cFiles
DEALLOCATE cFiles
GO

DROP TABLE ##SQLFiles
GO