Is it possible to execute a text file from SQL query?

后端 未结 9 928
星月不相逢
星月不相逢 2020-12-04 21:35

I have a number of generated .sql files that I want to run in succession. I\'d like to run them from a SQL statement in a query (i.e. Query Analyzer/Server Management Studi

9条回答
  •  -上瘾入骨i
    2020-12-04 22:08

    For anybody stumbling onto this question like I did and might find this useful, I liked Bruce Thompson's answer (which ran SQL from files in a loop), but I preferred Pesche Helfer's approach to file execution (as it avoided using xp_cmdshell).

    So I combined the two (and tweaked it slightly so it runs everything from a folder instead of a manually created list):

    DECLARE @Dir NVARCHAR(512) = 'd:\SQLScriptsDirectory'
    
    DECLARE @FileList TABLE (
      subdirectory NVARCHAR(512),
      depth int,
      [file] bit
    )
    
    INSERT @FileList
    EXEC Master.dbo.xp_DirTree @Dir,1,1
    
    WHILE (SELECT COUNT(*) FROM @FileList) > 0  
    BEGIN  
       DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) subdirectory FROM @FileList) 
       DECLARE @FullPath NVARCHAR(MAX) = @Dir + '\' + @FileName
    
       DECLARE @SQL NVARCHAR(MAX)
       DECLARE @SQL_TO_EXEC NVARCHAR(MAX)
       SELECT @SQL_TO_EXEC = 'select @SQL = BulkColumn
       FROM OPENROWSET
           (   BULK ''' + @FullPath + '''
           ,   SINGLE_BLOB ) AS MYTABLE'
    
       DECLARE @parmsdeclare NVARCHAR(4000) = '@SQL varchar(max) OUTPUT'  
    
       EXEC sp_executesql @stmt = @SQL_TO_EXEC
                     , @params = @parmsdeclare
                     , @SQL = @SQL OUTPUT  
    
       EXEC (@sql)
       DELETE FROM @FileList WHERE subdirectory = @FileName  
    
       PRINT 'EXECUTED: ' + @FileName     
    END
    

提交回复
热议问题