我使用SQL Server 2016的SQL Server 2016 SSIS从存储过程中获取光标
我有一个需要输入参数过滤器和输出
CURSOR
参数我想要一个存储过程
GET_RECORDS
将光标放入我的SSIS包中我已经创建了数据流任务,OleDb源和参数值的变量。然后映射参数
但是当我想保存组件 - 我得到一个错误
我想补充条款WITH RESULT SETS
有一些虚拟列,但我程序不返回任何结果集
我在做什么错?
任何建议将有帮助。
谢谢。
对此,尤里。
我使用SQL Server 2016的SQL Server 2016 SSIS从存储过程中获取光标
我有一个需要输入参数过滤器和输出CURSOR
参数
我想要一个存储过程GET_RECORDS
将光标放入我的SSIS包中
我已经创建了数据流任务,OleDb源和参数值的变量。然后映射参数
但是当我想保存组件 - 我得到一个错误
我想补充条款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();
}
嗨,乔。 谢谢你的回答。 在你的例子中,有一个静态表。但是我将entity_name作为输入参数传递给过程,这就是为什么我无法设置静态结果集,因为结果集取决于所选的实体表。 这就是为什么我试图提取它们作为输出参数。 也许最好是输出行集而不是光标? 至于Yuriy。 –
当我在SSIS中使用动态结构时,我使用脚本任务。您可能可以使用API。我会用动态导入xls/csv时使用的一些c#代码更新我的答案。 –
使用ado.net源代替oledb源代码,定义一个简单的select并获取您希望返回的列。现在您可以在数据流属性中定义expresión。
搜索ado.net源动态SQL
:)
你能详细解释一下这个问题吗?它是如何回答这个问题的?它会替代返回一个'CURSOR'的需求吗? –
尝试返回的记录,并使用的foreach在ETL代替光标
https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis/
我认为你可以做到这一点一个简单的方法,但我不知道你在做什么,正是...
我从来没有听说过能够输出游标。这是2016年的新事物,还是只是一厢情愿? –
这是一个要求。我想知道是否有可能实现它) –