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 中的脚本任务中使用上述脚本执行此操作。

出了什么问题?

SSIS 脚本任务和 SQL 大容量插入的问题 - C#

从错误来看,脚本任务似乎无法识别您的变量。若要解决此问题,请将变量User::TheRecords添加到脚本任务中的ReadOnlyVariablesReadWriteVariables集合中。请参阅此图像以供参考