SSIS 脚本任务和 SQL 大容量插入的问题 - C#
本文关键字:问题 插入 大容量 脚本 任务 SQL SSIS | 更新日期: 2023-09-27 18:31:29
这是我正在尝试做的事情:
我正在使用执行SQL任务(在ForEach循环容器中)使用相同的查询遍历大约20个SQL Server实例,每个实例显然返回具有相同列的行。这将转到具有正确名称 (0) 和变量名称的完整结果集User::TheResults.
这位似乎工作正常,即它没有错误。
然后,我使用脚本任务 (C#) 使用 SSIS 结果集填充数据表,并将其大容量复制到预先存在的 SQL Server 表中。
下面是 C# 代码...
public void Main()
{
// TODO: Add your code here
OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();
oleDA.Fill(dt, Dts.Variables["User::TheRecords"].Value.ToString());
SqlConnection connection = new SqlConnection("Data Source=Server1'Instance1;Initial Catalog=iteration_test;Integrated Security=SSPI");
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "dbo.versiontest";
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
执行任务时我收到错误,但它不够明确,无法指出特定问题。它只是说:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providerArgs, ParameterModifier[] 修饰符, CultureInfo culture, String[] namedParams) at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
我是一名DBA,目前正在参与很多BI工作,我的C#技能马马虎虎。我假设问题在我的代码逻辑中。
因此,回顾一下,我在 SSIS 中将一个结果集设置为变量,我想将其转到 SQL Server 表。我在 SSIS 中的脚本任务中使用上述脚本执行此操作。
出了什么问题?
从错误来看,脚本任务似乎无法识别您的变量。若要解决此问题,请将变量User::TheRecords
添加到脚本任务中的ReadOnlyVariables
或ReadWriteVariables
集合中。请参阅此图像以供参考