如何创建一个SSIS包,它将运行位于特定文件夹中的T-SQL查询列表?

use*_*933 3 t-sql sql-server ssis etl ssis-2012

我正在使用SQL Server 2012,我需要创建一个SSIS包来运行T-SQL特定文件夹中的查询列表.

我的T-SQL查询列表以'01(查询名称).sql'开头,该文件夹包含25个查询的列表.我需要从查询'01 ...'到'25 ......开始运行这些查询的任务

这可以在SSIS包中创建吗?如果是,我应该使用哪个任务?

更新1

我尝试了@Hadi建议的第一种方法,脚本任务抛出以下异常

错误:调用目标抛出了异常

SSDT中我的任务的屏幕截图

在此输入图像描述

脚本任务VB代码

 <Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
 Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

 Public Sub Main()

    Using sr As New IO.StreamReader(Dts.Variables("strFilename").Value.ToString)

        Dts.Variables("strQuery").Value = sr.ReadToEnd()
        sr.Close()

    End Using

    Dts.TaskResult = ScriptResults.Success
End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

变量

在此输入图像描述

Had*_*adi 5

(1)使用脚本任务+执行SQL任务

  1. 添加Foreach循环容器
  2. 选择type = File枚举器
  3. 选择包含.sql文件的文件夹作为源目录
  4. 选择Fully qualified文件名选项
  5. 转到变量映射选项卡,结果映射到一个变量(创建新的例如:@[User::strFilename])
  6. 创建类型字符串的变量 @[User::strQuery]
  7. 在foreach循环容器中添加脚本任务并选择@[User::strFilename]只读变量,并@[User::strQuery]读写变量
  8. 在脚本任务内编写以下代码(选择Visual Basic作为语言):

    Try
    
        Using sr as new IO.StreamReader(Dts.Variables("strFilename").Value.ToString)
    
            Dts.Variables("strQuery").Value = sr.ReadToEnd()
            sr.Close()
    
        End Using
    
        Dts.TaskResult = ScriptResults.Success
    
    Catch ex as exception
    
        Messagebox.Show(ex.Message)
        Dts.TaskResult = ScriptResults.Failure
    
    End Try
    
    Run Code Online (Sandbox Code Playgroud)
  9. 添加Execute SQL Task链接到Script Task,然后选择ConnectionString属性,然后选择SQLSource Typeproperty =Variable

  10. 选择@[User::strQuery]SourceVariable

(2)使用执行过程任务

使用foreach循环容器循环遍历这些文件,然后使用a Execute process task来运行这些查询SQLCMD.

附加信息:


(3)使用批处理文件

您也可以在没有SSIS的情况下实现此目的,只需使用.BAT您使用记事本创建的批处理文件: