我使用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年的新事物,還是隻是一廂情願? –
這是一個要求。我想知道是否有可能實現它) –