这是我想要做的事情:
我使用执行SQL任务(在ForEach循环容器中)使用相同的查询循环遍历大约20个SQL Server实例,每个实例都显然返回具有相同列的行。这将转到具有正确名称(0)和变量名称User::TheResults.
这一点似乎工作正常,即它没有错误。
然后我使用脚本任务(C#)使用SSIS结果集填充DataTable并将其批量复制到预先存在的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) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) 在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
我是一名DBA,目前正在参与大量的BI工作,而我的C#技能也是如此。我假设问题在我的代码逻辑中。
所以回顾一下,我在SSIS中设置了一个结果集作为变量,我希望得到一个SQL Server表。我在SSIS的脚本任务中使用上面的脚本来做这件事。
出了什么问题?
答案 0 :(得分:2)
从错误看,Script Task似乎无法识别您的变量。要解决此问题,请将变量User::TheRecords
添加到“脚本任务”中的ReadOnlyVariables
或ReadWriteVariables
集合中。请参阅此image以获取参考资料