簡體   English   中英

SQL Server 2016 SSIS從存儲過程獲取游標

[英]SQL Server 2016 SSIS get cursor from stored procedure

我正在使用SQL Server 2016。

  1. 我有一個存儲過程GET_RECORDS ,它接受過濾器的輸入參數並輸出CURSOR參數

  2. 我想在我的SSIS包中獲取此光標

  3. 我創建了數據流任務,OleDb源和參數值變量。 然后映射參數

參數映射屏幕

但是當我想保存組件時-我收到了一個錯誤

錯誤畫面

我試圖用一些虛擬列添加WITH RESULT SETS子句,但是我的過程未返回任何結果集

我究竟做錯了什么?

任何建議都會有所幫助。

謝謝。

問候,尤里。

源組件試圖確定將返回哪些列和類型。 由於您使用的是動態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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM