IT Nota

  • Home
  • How To
  • .NET
  • WordPress
  • Contact

How to Create SSIS Package in Visual Studio 2017

This posting will show you how to create an SSIS package using the legacy Package Deployment Model in Visual Studio 2017.

Please be sure before you do anything that you have SQL Server Data Tools for Visual Studio 2017 installed. You can find the SSDT download link below. Install it within the instance of your Visual Studio instead of creating a new one. With SSDT, you will be able to design and deploy any integration services package with the same ease as you would develop an application in Visual Studio.

  1. From the top menu, go to File, and select New and Project.Visual Studio 2017 New Project Menu 
  2. Under New Project window, select Business Intelligence, Integration Services and Integration Services Project.Enter the name of your project (e.g., SSIS-ITNota) and select a folder where you want to save the project (e.g., C:\Users\ITNota) and click OK.SSIS Business Intelligence New Integration Services Project 
  3. As we are using a package deployment model, we need to convert the project before we’re doing anything else. Under Solution Explorer, right-click on the project and click on Convert to Package Deployment Model.SSIS Convert to Package Deployment Model setting 
  4. You will see a dialog box with the message below. Just click OK to proceed.
            This will change the project to use the package deployment model. You
            cannot perform this conversion if you are using any features unique to
            the project deployment model, such as parameters.
     
            Before conversion, all packages in this project will be checked for
            compatibility with the package deployment model. This may take
            several minutes if the project contains many packages.
     
            Click OK to proceed.
    

     

    SSIS Convert to Package Deployment Model dialog box

    If you do the conversion in the beginning of your project (recommended), you should see your project and package passed the conversion. Click OK to complete the conversion.

    SSIS Convert to Package Deployment Model Passed

    You should see that after the project’s name there’s an extra note that indicates it’s a package deployment model after the conversion is complete.

     

  5. Here are the highlights of the differences between Project Deployment Model and Package Deployment Model side-by-side.SSIS side-by-side comparison between Project and Package Deployment Model 
  6. Rename Packages.dtsx to something more meaningful for your project.SSIS rename Default.dtsx 

This should be enough to get you started with creating an SSIS package with Visual Studio 2017.

If you need to deploy your SSIS package to a different version of SQL Server, make sure you set the TargetServerVersion to the SQL Server version on your host server.

And check this post to avoid one of the most common mistake that developers make when deploying the package to production.

For a more elaborate explanation, Microsoft has designed a great Integration Services tutorials on how to create an ETL package and deploy it, which you can find at the bottom of this post.

Download

SSDT Download for Visual Studio 2017

Further Reading

SSIS Best Practice with Naming Conventions
How to Build SSIS Package for Different SQL Server Version with Visual Studio 2017 and SSDT
How to Add Custom Logging to SSIS Package
Integration Services Tutorials
Create a Project and Basic Package with SSIS
Deploy Integration Services (SSIS) Projects and Packages
Legacy Package Deployment (SSIS)
Gotcha in Executing SSIS from DTExec Command Line
How to Fix Failed to Decrypt Protected XML Node Error in SSIS

November 28, 2018 Filed Under: How To Tagged With: ETL, Microsoft, SSIS

How to Build SSIS Package for Different SQL Server Version with Visual Studio 2017 and SSDT

After deploying an SSIS package built with Visual Studio 2017, we encountered a surprise when running it via a Command Prompt:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
 
C:\Windows\system32>"D:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe" /File "D:\PROG\bin\SSIS_Extract.dtsx" /Conf "D:\PROG\bin\SSIS_Extract.dtsConfig"
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.2100.60 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
 
Started:  5:04:56 PM
Error: 2018-11-26 17:04:56.20
   Code: 0xC001700A
   Source: SSIS_Extract
   Description: The version number in the package is not valid. The version number cannot be greater than current version number.
End Error
Error: 2018-11-26 17:04:56.20
   Code: 0xC0016020
   Source: SSIS_Extract
   Description: Package migration from version 8 to version 6 failed with error
0xC001700A "The version number in the package is not valid. The version number cannot be greater than current version number.".
End Error
Error: 2018-11-26 17:04:56.21
   Code: 0xC0010018
   Source: SSIS_Extract
   Description: Error loading value "<DTS:Property xmlns:DTS="www.microsoft.com/
SqlServer/Dts" DTS:Name="PackageFormatVersion">8</DTS:Property>" from node "DTS:
Property".
End Error
Could not load package "D:\PROG\bin\SSIS_Extract.dtsx" because of error 0xC0010014.
Description: The package failed to load due to error 0xC0010014 "One or more error occurred. There should be more specific errors preceding this one that explains the details of the errors. This message is used as a return value from functions that encounter errors.". This occurs when CPackage::LoadFromXML fails.
Source: SSIS_Extract
Started:  5:04:56 PM
Finished: 5:04:56 PM
Elapsed:  0.203 seconds
 
C:\Windows\system32>

Pay attention to this section of error message:

Description: Package migration from version 8 to version 6 failed with error
0xC001700A "The version number in the package is not valid. The version number cannot be greater than current version number.".

What’s the real problem? It turns out that the SQL Server version in the production server is older than the version of the tool. The package was built with SSIS designer for Visual Studio 2017 (version 8), however the target database is SQL Server 2012 (version 6). So what do we need to do?

In the past, we needed to install an older version of Business Intelligence Development Studio that matches the SQL Server version we’re targeting. Because of this, many developers still have the habit of having several versions of Visual Studio installed on their machines just to handle every version of SSIS package. Fortunately with the newer of Visual Studio with SSDT, we can target the latest SQL Server (2017) down to 2012.

How do we target an older version of SQL Server?

Before we begin with the steps, make sure your Visual Studio 2017 has the SQL Server Data Tools installed. Otherwise, check the SSDT download at the bottom of this post.

How to target a specific version of SQL Server in SSIS

  1. In your project (e.g., Temp1), right-click on the project name and click Properties (or press Alt-Enter).

    SSIS Project Properties

  2. Once the Property Page is opened, click on the Configuration Properties and check the TargetServerVersion.

    SSIS Project Configuration Properties TargetServerVersion SQL Server

  3. Click on the drop-down list and select the correct SQL Server version on the machine where you want to deploy your SSIS package and click OK.

  4. Rebuild your SSIS package and re-deploy the package.

This time you will be able to run the package without any problems.

Update 2 May 2019: Since the posting of this article, apparently Microsoft removed support for SQL Server 2012 in SSDT version 15.8.1, but added it back in version 15.9.0. Check your SSDT version if you don’t see an option to target SQL Server 2012.

Make sure you pay attention to the notes marked as Important. For example, before installing SSDT for Visual Studio 2017 (15.9.1), you need to uninstall Analysis Services Projects and Reporting Services Projects from Tools, Extensions and Updates and close all Visual Studio instances.

Download

SSDT for VS 2017 Installer

Further Reading

How to Create SSIS Package in Visual Studio 2017
SQL Server Data Tools
Download and install SQL Server Data Tools (SSDT) for Visual Studio
How to Add Custom Logging to SSIS Package

November 27, 2018 Filed Under: How To Tagged With: ETL, Microsoft, SQL Server, SSIS

Replicate Oracle Data to SQL Server

Background

HP Asset Manager SaaS data need to be transferred across customer’s internal network without too much impact on the bandwidth between the two VPNs. The agreed solution is to replicate data in Oracle to a Microsoft SQL Server database in a local network. Any new records will be inserted into the new database while existing ones will be updated.

The steps below are the quick way to setup an upsert (update and insert) SSIS package that will replicate content of a table in one database platform to another based on the last modified date on a scheduled interval. While the example is very specific, the concept can easily be adopted for other purposes.

The assumption is all Data Sources are already setup including Oracle Data Provider.

In this example, SSIS is created to transfer data from amPortfolio table, which is one of the most active tables in HP Asset Manager.

One table called QueryTime was setup just initially, this table is used to store the time of when the last query was pulled for that particular table.

CREATE TABLE QueryTime (
	Id INT IDENTITY(1,1) NOT NULL,
	TableName NVARCHAR(20) NOT NULL,
	QueryTimestamp DATETIME NOT NULL,
	
	CONSTRAINT PK_QueryTimeId PRIMARY KEY NONCLUSTERED (Id)
)

Steps

  1. Create a new DTSX package (i.e., Portfolio.dtsx). Since this will be deployed using Package Configurations, the ProtectionLevel in Properties needs to be set to DontSaveSensitive.

    SSIS Package Properties

  2. Create two variables qTimestamp and sqlPortfolio with DateTime and String data type respectively. The qTimestamp is to store the value pulled from the QueryTime table and sqlPortfolio is used to store the dynamic Oracle SQL in order to pull records since the last query timestamp.

    SSIS Setup Variables

    The initial value of sqlPortfolio in essence is a simple select statement from the amPortfolio table in the Oracle DB.

    SELECT * FROM AMPORTFOLIO

    Except with all the fields listed out, which is the better way to query.

  3. From the Toolbox, drag Execute SQL Task, Script Task, Data Flow Task, and another Execute SQL Task (1) to the Control Flow and connect the boxes by dragging the green line in the order shown below.

    SSIS Control Flow

  4. Double-click the first Execute SQL Task to open its editor. In the General section, change the Name to “Get Last QueryTime.” Select the Connection, set the ResultSet to Single row, and input the following SQLStatement to get the last query time.

    	SELECT QueryTimestamp 
        	FROM dbo.QueryTime
    	WHERE (TableName = 'AMPORTFOLIO')

    SSIS SQL Task Editor: General

  5. Still on the same active window, click on Result Set and on the right box, type in “QueryTimestamp” under the column Result Name and under Variable Name, choose the variable User::qTimestamp. Basically we take the value from column QueryTimestamp and store it in qTimestamp variable.

    SSIS SQL Task Editor: Result Set
    Click OK.

  6. Click once on the text “Script Task” and change the name to “Compose Oracle SQL” just to make it more meaningful. Double-click on the box to open the editor. In ReadOnlyVariables, if you click on the empty textbox, there should be an ellipsis (…) button. Click on the ellipsis, and select User::qTimestamp variable. Do the same for ReadWriteVariables but use variable User::sqlPortfolio this time.

    SSIS Script Task Editor

  7. Click on Edit Script… and place the code in the Main() function.

           public void Main()
           {
               string sqlCmd = string.Empty;
               string sqlPortfolio = Dts.Variables["sqlPortfolio"]
               						    .Value.ToString();
               DateTime dTimeStamp = Convert.ToDateTime(
               						   Dts.Variables["qTimestamp"]
               						      .Value);
               string timeStamp = null;
    
               if (!string.IsNullOrEmpty(dTimeStamp.ToString()))            
                 timeStamp = dTimeStamp.ToString("yyyy-MM-dd HH:mm:ss");            
               else            
                 timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
               sqlCmd = string.Format("{0} WHERE TO_CHAR(DTLASTMODIF, 'YYYY-MM-DD HH24:MI:SS') >= '{1}' ORDER BY LPORTFOLIOITEMID",
               						   sqlPortfolio, timeStamp);
    
               // Store Oracle SQL in User:sqlPortfolio variable
               Dts.Variables["sqlPortfolio"].Value = sqlCmd;
               
               Dts.TaskResult = (int)ScriptResults.Success;
           }

    Close the window and click OK.

  8. Double-click on Data Flow Task or just click on the Data Flow tab.

  9. Open the Toolbox and from Data Flow Sources, drag OLE DB Source into the Data Flow designer surface and name it amPortfolio to reflect the table name it’s pulling data from.

  10. Open the Source Editor and select the OLE DB connection manager. Data access mode: is set to SQL command from variable and for Variable name select User::sqlPortfolio, and click OK.

  11. Next, from the Toolbox, under Data Flow Transformations drag Lookup to the surface. Open the editor and set it according to these settings:

    General

    Cache mode: Full cache
    Connection type: OLE DB connection manager
    Specify how to handle rows with no matching entries: Redirect rows to no match output

    Connection

    OLE DB connection manager: Connection to the destination database.
    Use results of an SQL query: with the following SQL statement:

    		SELECT LPORTFOLIOITEMID 
    			FROM PortfolioItem 
    		ORDER BY LPORTFOLIOITEMID

    Columns

    Drag the LPORTFOLIOITEMID from Available Input Columns on the left box to the Available Lookup Columns on the right and click OK.

    SSIS Lookup Transformation Editor

  12. Drag OLE DB Destination, name it Insert and drag OLE DB Command and name it Update.

  13. From the Lookup box, drag the green line arrow to Insert and a dialog box will pop up. Select the Lookup No Match Output from the drop down list and click OK.

    SSIS Input Output Selection

  14. Click on the Lookup box again and drag a new green line arrow to Update, and it will automatically assign the Lookup Match Output to it as shown on the picture below.

    SSIS Data Flow

  15. Double-click Insert and set Data access mode to Table or view and select the corresponding destination table from the drop-down list for Name of the table or the view. If the table does not exist yet, you can click on the button New… and SSIS will guess the table schema based on the source table.

    The auto-generated schema is generally accurate, except the table name itself, so make sure you review the SQL first before you commit by clicking OK. In this case, the table name was changed from [Insert] to [PortfolioItem].

    SSIS OLE DB Create Table Modification

    SSIS OLE DB Destination Editor

    After the correct table is selected, click OK.

  16. Double-click the Update and use the following settings:

    Connection Managers

    Select the Connection Manager from the drop-down list.

    SSIS Advanced Editor for Update

    Component Properties

    SqlCommand
    Click on the ellipsis and input an update SQL command (shortened in this example) below:

    	UPDATE [dbo].[PortfolioItem]
     	SET [BCREATEDONTHEFLY] = ?
           ,[DTLASTMODIF] = ?
           ,[ASSETTAG] = ?
    	WHERE [LPORTFOLIOITEMID] = ?

    Column Mappings

    This is the most tedious part of the setup. All the question mark in the SQL Update statement is translated into Param_# (i.e., Param_0, Param_1, Param_3, etc.) on the Destination Column. The order of the fields in the SQL statement determines the sequential number of the Param_#. So in this case, [BTCREATEDONTHEFLY] maps to Param_0 and the last field in the statement [LPORTFOLIOITEMID] is mapped to the last field in the Destination Column (i.e, Param_68). It’s crucial that you don’t miss a field or transpose the order.

    Once this part is done, click OK.

  17. Go back to the Control Flow tab and double-click on the last Execute SQL Task (Update QueryTime). This time we just need to store the new timestamp to the QueryTime table based on the latest record processed.

    SSIS Execute SQL Editor Update Query

    On the SQLStatement use the following SQL statement:

    	UPDATE dbo.QueryTime
    	SET QueryTimestamp = (SELECT MAX(DTLASTMODIF) AS Expr1
    						  FROM dbo.PortfolioItem)
    	WHERE (TableName = 'AMPORTFOLIO')

    Click OK.

Build the package and it should be ready to deploy. The final Control Flow should look like this.
SSIS Control Flow Final

Caveat

  • In order to get the package setup quickly, QueryTime table must have an initial value, at least with a table name (i.e., AMPORTFOLIO). To include all records initially, just put in 1900-01-01 and the date will be updated after the first run.

    INSERT INTO QueryTime (TableName, QuertyTimestamp)
    VALUES ('AMPORTFOLIO', '')
  • If the database has a large volume of tables, this solution might not be practical.

Further Reading

How to Create SSIS Package in Visual Studio 2017
How to Build SSIS Package for Different SQL Server Version with Visual Studio 2017 and SSDT

May 1, 2013 Filed Under: Database Tagged With: ETL, SSIS

Removing _x0022_ Character Issue in SQL Server and SSIS

Just recently after an a production database upgrade to a 64-bit SQL Server 2008 R2 RTM (from SQL 2000), the same SSIS 2008 package that exports data from SQL Server 2000 to a flat file (csv/txt) started to wrap all data fields with _x0022_ hexadecimal characters.

CSV in Excel

The CSV file that was extracted is not totally worthless especially if it’s already taken hours to produce that file. We can easily have a quick workaround to fix this until the next scheduled export. By using Notepad/Notepad2 or other text editor, you want to replace the _x0022_ character with a double quotes (“).

CSV in Notepad2

Next, check your Flat File Connection Manager. Look into the Connection Managers and open the Flat File Connection Manager Editor and check the Text qualifier box. Change it to double quotes (“) from _x0022_. Click OK, save and rebuild your package.

SQL Server Flat File Connection Manager Editor

Looking further into this, it turns out the cause of the issue is the version of SQL Server in development is different than the one in production as shown in the two pictures below.

SQL Server 2008 R2 SP1 Development

Development (R2 SP1)

SQL Server 2008 R2 Production

Production (R2)

In this case, DEV is more up-to-date than PROD. After upgrading the production SQL Server to SP1, the issue was resolved.

Further Reading:
SQL Server 2008 SP1 CU 6 includes small changes to .dtsx files
SQL Server 2008 R2 SP1 Download

May 22, 2012 Filed Under: Database Tagged With: ETL, SQL Server, SSIS

« Previous Page
Buy me a coffee Support this site
Buy Me a Coffee?

Categories

  • .NET
  • Coding
  • Cybersecurity
  • Database
  • How To
  • Internet
  • Multimedia
  • Photography
  • Programming
  • Resources
  • Review
  • Tips and Tricks
  • Uncategorized
  • Use Case
  • WordPress
  • Writing

Recent Posts

  • How to View Stored Procedure Code in SQL Server
  • How to Find a String in SQL Server Stored Procedures
  • How to Remove Cached Credentials without Rebooting Windows
  • ESP Work Automation: Empowering Enterprises with Streamlined Workflows and Operational Efficiency
  • How to Search for a String in All Tables in a Database

Recent Posts

  • How to View Stored Procedure Code in SQL Server
  • How to Find a String in SQL Server Stored Procedures
  • How to Remove Cached Credentials without Rebooting Windows
  • ESP Work Automation: Empowering Enterprises with Streamlined Workflows and Operational Efficiency
  • How to Search for a String in All Tables in a Database

Tags

.NET .NET Core AdSense ASP.NET Cdonts Dll Classic ASP Code Editor ETL FSharp Genesis Framework Git Google HP Asset Manager HTML5 Hugo IIS Information Security Internet Internet Information Services iOS JAMStack Linux macOS Microsoft Microsoft SQL Server MVC PHP PowerShell Python Simple Mail Transfer Protocol Smtp Server SQL SQL Server SSIS SSMS SSRS Sublime Text Visual Studio Visual Studio Code VPN Windows Windows 8 Windows 10 Windows 2012 Windows Server

Copyright © 2011-2025 IT Nota. All rights reserved. Terms of Use | Privacy Policy | Disclosure