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)
变量
.sql文件的文件夹作为源目录Fully qualified文件名选项@[User::strFilename])@[User::strQuery]@[User::strFilename]为只读变量,并@[User::strQuery]为读写变量在脚本任务内编写以下代码(选择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)添加Execute SQL Task链接到Script Task,然后选择ConnectionString属性,然后选择SQLSource Typeproperty =Variable
@[User::strQuery]为SourceVariable使用foreach循环容器循环遍历这些文件,然后使用a Execute process task来运行这些查询SQLCMD.
附加信息:
您也可以在没有SSIS的情况下实现此目的,只需使用.BAT您使用记事本创建的批处理文件: