Reusing Recordsets Across SSIS Data Flows

28 May 2026
KingswaySoft Team

In many integration projects, the same source data might be used multiple times at different stages of an SSIS package. You might have a data flow that retrieves records from an API endpoint, while another data flow can consume the same data again. Repeatedly calling the same endpoint or introducing loop-based logic can make packages more difficult to maintain, increase execution time, and add unnecessary complexity.

Data consistency is another important consideration. When a service endpoint is called multiple times, each request may return the source system's current state at that moment. Shopify provides a great example of why capturing and reusing a consistent dataset can be beneficial. As a transactional system, Shopify is a very busy application, and its data is constantly updated. If an order is updated, fulfilled, edited, cancelled, or partially refunded between API calls, the second retrieval may not have the same data that was processed in the original data flow.

By retrieving the data once and storing the required records in an SSIS object variable, the package can work from a single, consistent snapshot of the source data. This is especially useful when working with parent-child responses such as Shopify orders object, which has its associated line_items. Instead of retrieving the two objects in two separate service calls, we can make a single service call to capture both the parent and child records at the same time and use them for downstream data flow tasks. By doing this, you can prevent data discrepancies that could occur from using two service calls.

KingswaySoft offers the Premium Recordset Source component as part of our SSIS Integration Toolkit. This component allows you to efficiently reuse data stored in SSIS object variables, reducing repeated reads from the same endpoint, while maintaining a fully pipeline-based design.

In this example, we will retrieve Shopify orders along with their child line_items just once, and then reuse the saved recordset for various downstream processes.

Setup in the SSIS Control Flow and data flow

In this demo, we will use a Shopify order integration scenario. A Shopify order represents the overall customer transaction, while each record in line_items represents an individual product item purchased or sold in the order.

The order data contains information such as customer details, order date, financial status, currency, subtotal, tax, shipping, and total amount. This data can be processed directly within the initial data flow. The line_items data, however, often requires separate product-level validation and additional data quality checks before loading into downstream systems.

flow overview

In the first data flow, the order output continues through the pipeline for order-level processing. The line item output is directed into a Recordset Destination, where the rows are stored in an SSIS object variable.

The captured line item recordset should include all fields needed for downstream processing, such as line item ID, parent order ID, product ID, SKU, title, quantity, and price.

Dataflow Orders and Line_Items

If you have not previously worked with the out-of-the-box Recordset Destination, this component allows records to be stored in an object variable with indexed columns that can later be retrieved and reused.

In the image below, the highlighted VariableName property specifies the object variable where the dataset will be stored. The variable must use the Object data type.

Recordset Destination Properties

On the Input Columns page, you can select specific upstream columns or store the entire record structure. Note that the usage type is READONLY, meaning the values can be read later from the object variable but not modified.

For this use case, we only need to read the captured line_items data, so this configuration is sufficient.

Recordset Destination Configuration

Premium Recordset Source Retrieval

Once the dataset has been captured in the object variable, the Premium Recordset Source can be used to read the saved line_items recordset and push all rows back through the pipeline without requiring any looping mechanism, such as a ForEach Loop, or a separate service call to retrieve those child records. 

Instead of starting a new data flow with another Shopify Source call, the data flow reads directly from the SSIS object variable that serves as the data flow's source component.

After the records are restored into the pipeline, a Premium Service Lookup component can enrich the data using fields such as product_id or SKU. This allows the package to join line items against a product reference table or external product object before loading the data into the order details destination.

Because the line items originate from the same original Shopify order retrieval, they remain fully aligned with the order records processed earlier in the package.

dataflow load order details

The Premium Recordset Source is simple to configure. You only need to specify the source object variable that contains the stored recordset, and map the columns either by name or by index.

premium recordset source

On the Columns page, the previously stored fields are automatically populated, ensuring that every downstream data flow works against the same snapshot of data.

premium recordset source columns

You may also notice the Premium Service Lookup Lookup component positioned after the Recordset Source in the data flow. This component can be used to enrich records by performing lookups against related objects or tables.

In this example, the lookup uses Shopify product data, and because Shopify is one of many services supported by the Premium Service Lookup component, we are reusing the same connection manager available in the same package.

PSL Product General

The next configuration page allows you to define the lookup condition used to relate the two objects. As records flow through the pipeline, the lookup evaluates each row against the configured matching criteria.

The final configuration page displays the fields returned from the lookup operation. To avoid naming conflicts, the returned columns are automatically prefixed with LookupResult.

PSL Lookup Conditions

PSL Output Columns

In another data flow, we may need to isolate line item records that do not violate system constraints but fail internal business validation rules. These records can create downstream reporting or operational issues if not properly reviewed.

The Premium Recordset Source can once again read the saved line_items recordset and pass the rows into a Conditional Split component for data quality validation. For example, rows with missing SKUs or zero quantities can be separated from valid line items and loaded into an OrderLineExceptions table for further investigation.

dataflow line_item data quality processing

Considerations

An alternative approach would be to iterate through the stored line_items data using a ForEach Loop. However, this method processes records one row at a time and can introduce unnecessary complexity and excessive service calls, especially for larger datasets.

By storing the line item output once and reusing it later through the Premium Recordset Source component, the package remains fully pipeline-based, easier to maintain, and more scalable.

This pattern is not intended to replace simple multi-destination designs. If the same rows only need to be written to multiple destinations within a single data flow, connecting additional destination components may still be the best option.

The Premium Recordset Source component becomes especially valuable when portions of a service response, such as Shopify line_items, need to be reused across separate data flows or at later stages of the package.

Conclusion

The Premium Recordset Source component provides a practical and scalable way to reuse previously captured SSIS recordsets across multiple stages of a package.

In this Shopify example, the package retrieves order data once, processes the order header records immediately, and stores the child line_items output in an SSIS object variable for later reuse. Additional data flows can then consume the saved recordset without issuing additional Shopify API calls.

For integration teams working with parent-child service responses, this approach simplifies package design, improves maintainability, reduces repeated retrieval logic, and ensures consistent processing across SSIS data flows.

Archive

May 2026 3 April 2026 3 March 2026 2 February 2026 2 January 2026 2 December 2025 2 November 2025 2 October 2025 2 September 2025 2 August 2025 2 July 2025 2 June 2025 1 May 2025 2 April 2025 3 March 2025 1 February 2025 1 January 2025 2 December 2024 1 November 2024 3 October 2024 1 September 2024 1 August 2024 2 July 2024 1 June 2024 1 May 2024 1 April 2024 2 March 2024 2 February 2024 2 January 2024 2 December 2023 1 November 2023 1 October 2023 2 August 2023 1 July 2023 2 June 2023 1 May 2023 2 April 2023 1 March 2023 1 February 2023 1 January 2023 2 December 2022 1 November 2022 2 October 2022 2 September 2022 2 August 2022 2 July 2022 3 June 2022 2 May 2022 2 April 2022 3 March 2022 2 February 2022 1 January 2022 2 December 2021 1 October 2021 1 September 2021 2 August 2021 2 July 2021 2 June 2021 1 May 2021 1 April 2021 2 March 2021 2 February 2021 2 January 2021 2 December 2020 2 November 2020 4 October 2020 1 September 2020 3 August 2020 2 July 2020 1 June 2020 2 May 2020 1 April 2020 1 March 2020 1 February 2020 1 January 2020 1 December 2019 1 November 2019 1 October 2019 1 May 2019 1 February 2019 1 December 2018 2 November 2018 1 October 2018 4 September 2018 1 August 2018 1 July 2018 1 June 2018 3 April 2018 3 March 2018 3 February 2018 3 January 2018 2 December 2017 1 April 2017 1 March 2017 7 December 2016 1 November 2016 2 October 2016 1 September 2016 4 August 2016 1 June 2016 1 May 2016 3 April 2016 1 August 2015 1 April 2015 10 August 2014 1 July 2014 1 June 2014 2 May 2014 2 February 2014 1 January 2014 2 October 2013 1 September 2013 2 August 2013 2 June 2013 5 May 2013 2 March 2013 1 February 2013 1 January 2013 1 December 2012 2 November 2012 2 September 2012 2 July 2012 1 May 2012 3 April 2012 2 March 2012 2 January 2012 1

Tags