[英]SQL Server 2016 SSIS get cursor from stored procedure
源組件試圖確定將返回哪些列和類型。 由於您使用的是動態SQL,因此每次運行元數據都可以更改。
使用結果集可讓您定義要返回的數據,但僅在保證每次執行時都得到那些結果時才應使用。
編輯:我創建一個連接並運行命令,以便它填充數據表。 然后,我將列標題放入字符串數組中。 有很多例子。
然后,我使用以下函數創建目標表。 最后,我創建一個數據讀取器並將其傳遞給.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源,定義一個簡單的select並獲取要返回的列。 現在,您可以在數據流屬性中定義expresión。
搜索ado.net源動態SQL
:)
嘗試返回記錄並在ETL中使用foreach代替游標
https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis/
我認為您可以通過一種簡單的方法來完成此操作,但是我不知道您在做什么,確切地說...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.