我正在使用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
变量
答案 0 :(得分:5)
.sql
文件作为源目录Fully qualified
文件名选项@[User::strFilename]
) @[User::strQuery]
@[User::strFilename]
作为只读变量和@[User::strQuery]
作为 ReadWrite Variable 在脚本任务中编写以下代码(选择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
添加Execute SQL Task
链接到Script Task
,然后选择ConnectionString属性,然后选择SQLSource Type
property = Variable
@[User::strQuery]
为SourceVariable
使用foreach循环容器循环遍历这些文件,然后使用Execute process task
使用SQLCMD
运行这些查询。
其他信息:
你也可以在没有SSIS的情况下实现这一点,只需使用你用记事本创建的批处理文件.BAT
:
答案 1 :(得分:1)
当我学到新的东西时,我对哈迪赞不绝口。
但这是我用脚本任务完成的。经销商的选择。
//Read SQL to string
System.IO.StreamReader sr = new System.IO.StreamReader(Dts.Variables["ForEachFilePathName"].Value);
string sql = sr.ReadToEnd();
sr.Close();
string cstr = Dts.Variables["connString"].Value;
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(cstr))
{
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, conn);
conn.Open();
cmd.ExecuteNonQuery();
}