从另一个sql脚本运行sql脚本

时间:2017-04-19 10:10:56

标签: sql sql-server sqlproj

我想从指定的文件夹运行所有脚本。我创建了包含脚本路径的sql-cursor。

我想执行脚本并记录它们的用法,但是如何在其他sql脚本中运行sql脚本。在Visual Studio中的sqlproj中使用了':r'语句,但它在我的情况下不起作用,所以我该如何解决它?我使用的是SQL Server 2016。

    FETCH NEXT FROM ScriptsFromFolderCursor INTO @scriptName
    WHILE @@FETCH_STATUS = 0
    BEGIN 
        DECLARE @fullScriptPath nvarchar(1024) = @MyPath + @scriptName

        -- WHAT SHOULD BE THERE ??
        :r @fullScriptPath

        -- log usage of script
        INSERT INTO  DeployedSqlScripts([ScriptName], [Version],[DateUtc])
        VALUES (@fullScriptPath, @DbVersion, GetUtcDate())

        FETCH NEXT FROM ScriptsFromFolderCursor INTO @scriptName
    END

我收到了错误:

  

错误SQL72001:包含的文件@fullScriptPath   (C:\ GIT \ mypath中\ @FULLSCRIPTPATH)   不存在。 (54,8)

2 个答案:

答案 0 :(得分:0)

不确定您获得了什么错误,但从它的外观来看,您正在尝试使用SQLCMD语句(:r

您是否在SQLCMD模式下执行了此脚本? Documentation - https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility

答案 1 :(得分:0)

如果您愿意使用除T-SQL之外的脚本环境,则可以使用execsql.py(http://pypi.python.org/pypi/execsql)执行此操作。 INCLUDE metacommand(http://pythonhosted.org/execsql/#include)将允许您在正在运行的脚本中插入另一个SQL脚本,并且可以轻松地将目录中导入所有CSV文件的示例(http://pythonhosted.org/execsql/#example13)用于包括所有目录中的SQL脚本。

免责声明:我写了execsql.py。