我使用SQL Server 2016年
我有一个存储过程
GET_RECORDS
其取得输入参数,滤波器和输出CURSOR
参数我希望得到这个光标在我的SSIS包
我创造了数据流任务,OLEDB源和变量的参数值。 然后映射参数
PARAMS映射屏幕
但是当我想保存组件 - 我得到了一个错误
错误屏幕
我想补充条款WITH RESULT SETS
有一些虚拟的列,但我的过程不返回任何结果集
我究竟做错了什么?
任何建议将是有益的。
谢谢。
与问候,尤里。
我使用SQL Server 2016年
我有一个存储过程GET_RECORDS
其取得输入参数,滤波器和输出CURSOR
参数
我希望得到这个光标在我的SSIS包
我创造了数据流任务,OLEDB源和变量的参数值。 然后映射参数
PARAMS映射屏幕
但是当我想保存组件 - 我得到了一个错误
错误屏幕
我想补充条款WITH RESULT SETS
有一些虚拟的列,但我的过程不返回任何结果集
我究竟做错了什么?
任何建议将是有益的。
谢谢。
与问候,尤里。
源组件试图确定将返回哪些列和类型。 因为你使用动态SQL元数据可以在每次运行时间而改变。
使用结果集允许您定义返回的数据,但如果你保证你每次执行时的结果,才应使用。
编辑:我创建了一个连接,然后运行命令,以便它填充的数据表。 然后,我把列标题为一个字符串数组。 有很多的例子在那里。
然后,我用下面的函数来创建目标表。 最后我创造一个DataReader并传递到.NET SqlBulkCopy的。 希望这可以帮助。
private void CreateTable(string TableName, string[] Fields)
{
if (TableExists(TableName) && Overwrite)
{
SqlCommand = new SqlCommand($"Drop Table [{TableName}]", SqlConnection);
SqlCommand.ExecuteNonQuery();
}
string Sql = $"Create Table [{TableName}] (";
int ColumnNumber = 1;
foreach (string Field in Fields)
{
string FieldValue = Field;
if (! HasHeaders)
{
FieldValue = "Column" + ColumnNumber;
ColumnNumber++;
}
Sql += $"[{FieldValue}] Varchar(8000),";
}
Sql = Sql + "ImportFileID Int, ID Int Identity(1,1) Not Null, Constraint [PK_" + TableName + "] Primary Key Clustered ([ID] Asc))";
SqlCommand = new SqlCommand(Sql, SqlConnection);
SqlCommand.ExecuteNonQuery();
}
使用ado.net源,而不是OLEDB源,定义了一个简单的选择,让你想返回的列。 现在,您可以在数据流的属性定义expresión。
搜索ado.net源动态sql
:)
尝试返回的记录,并在ETL使用的foreach代替光标
https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis/
我想你可以从一个简单的方法做到这一点,但我不知道你在干什么,究竟是什么?