Click here to Skip to main content
6,635,885 members and growing! (20,127 online)
Email Password   helpLost your password?
Database » Database » SQL Server License: The GNU General Public License (GPL)

How to call SSIS package from the stored procedure

By JustChiragPatel

No need to create web service for SSIS package call.
SQL, SQL Server (SQL 2000, SQL 2005, SQL CE)
Posted:20 Jun 2008
Views:35,743
Bookmarked:19 times
Unedited contribution
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
2 votes for this article.
Popularity: 1.35 Rating: 4.50 out of 5

1

2

3
1 vote, 50.0%
4
1 vote, 50.0%
5

Introduction

SSIS (SQL Server Integration Services) packages, are the server side packages, which will be called from the server, that may be achieved by creating web service. But sometimes we want to pass some excel, or flat files in SSIS package, and this file must be transferred to server to use in SSIS package.

So sometimes there may be some security issues when the web service will be restricted to allow using resources on the server. So we have to use some other way, not web service, to call SSIS.

Background

This article assumes that you are familiar with creating SSIS packages and how to add variables into package and how to call SSIS package to use in code.

Using the code

This article has two attached files

1) enablexp_cmdScript.sql Download enablexp_cmdScript.zip - 251 B

2) ssisfromsql.sql Download ssisfromsql.zip - 570 B

First, i will tell the other way to call SSIS package other tahn using "web service". We can use Stored procedure to call SSIS package. How?

There is one System Stored Procedure in SQL Server 2005 called "xp_cmdshell" which will be set to "False", means this sp is not active by default at the time of SQL Server Installation. We have to manually enable this SP to use. This can be done two way, either by running some script, (which is given in enablexp_cmdscript.sql file) or by using "SQL Server surface Area configuration" tool which will be installed with SQL Server 2005.

xp_cmdshell : "xp_cmdshell" is an extended stored procedure provided by Microsoft and stored in the master database. This procedure allows you to issue operating system commands directly to the Windows command shell via T-SQL code. If needed the output of these commands will be returned to the calling routine.

Start the Surface Area congifuration tool from your SQL server installation in Program Menu, it will look like this,

SurfaceAreaMain.JPG

Now, click on the "Surface Area configuration for Features" link and you will see the following screen, from the Left side meny select your instance name and click on "xp_cmdshell" option under it, just like this,

xp_cmdshell.JPG

just enable the xp_cmdshell option, the xp_cmdsheel SP will be enabled after you restart the SQL server services.
If you do not want to do like this, just run the following Script lines in you selected instance in SQL Server,

USE master 
GO 
EXEC sp_configure 'show advanced options', 1 
GO 
RECONFIGURE WITH OVERRIDE 
GO 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE WITH OVERRIDE 
GO 
EXEC sp_configure 'show advanced options', 0 
GO        

Now, we are ready to use "xp_cmdshell" stored procedure to call our SSIS package.

Now, i have created one SSIS package called "ImportItemFile", what it will do, it will fetche the Excel file from the provided location on Server, and will load all the items from excel file to Item table in database.

Varialbes i have to pass are: FileName, CreatedBy, ContractDbConnectionString, BatchID, SupplierID

Here, i have used two special command one is "xp_cmdshell" and second is "dtexec".
now what is "dtexec" command,

dtexec : The dtexec command prompt utility is used to configure and execute SQL Server 2005 Integration Services (SSIS) packages. The dtexec utility provides access to all the package configuration and execution features, such as connections, properties, variables, logging, and progress indicators. The dtexec utility lets you load packages from three sources: a Microsoft SQL Server database, the SSIS service, and the file system.
(Reference from: http://msdn.microsoft.com/en-us/library/ms162810.aspx)

Now the Script i will create here, is dynamic SQL, means we can use it to call any SSIS pacakges, just we have to pass necessary varibales.

declare @ssisstr varchar(8000), @packagename varchar(200),@servername varchar(100)
declare @params varchar(8000)
----my package name
set @packagename = 'ImportItemFile'
----my server name
set @servername = 'myserver\sql2k5'


---- please make this line in single line, i have made this line in multiline 
----due to article format.
----package variables, which we are passing in SSIS Package.
set @params = '/set \package.variables[FileName].Value;"\"\\127.0.0.1\Common
           \SSIS\NewItem.xls\"" /set \package.variables[CreatedBy].Value;
           "\"Chirag\"" /set \package.variables[ContractDbConnectionString].Value;
           "\"Data Source=myserver\SQL2K5;User ID=sa;Password=sapass;
           Initial Catalog=Items;Provider=SQLNCLI.1;Persist Security Info=True;
           Auto Translate=False;\"" /set \package.variables[BatchID].Value;"\"1\"" 
           /set \package.variables[SupplierID].Value;"\"22334\""'

----now making "dtexec" SQL from dynamic values
set @ssisstr = 'dtexec /sq ' + @packagename + ' /ser ' + @servername + ' '
set @ssisstr = @ssisstr + @params
-----print line for varification 
--print @ssisstr

----
----now execute dynamic SQL by using EXEC. 
DECLARE @returncode int
EXEC @returncode = xp_cmdshell @ssisstr
select @returncode

now we will see the variable passing structure of the "dtexec" command,

/SET \package\DataFlowTask.Variables[User::MyVariable].Value;newValue

Now the @returncode variable will be returned by the "dtexec" command and it will be two record set, first will return the code from the following possibl value which will indicate the SSIS package status, and second table will describe all the processes happened during execution of the SSIS package.

Value Description

0

The package executed successfully.

1

The package failed.

3

The package was canceled by the user.

4

The utility was unable to locate the requested package. The package could not be found.

5

The utility was unable to load the requested package. The package could not be loaded.

6

The utility encountered an internal error of syntactic or semantic errors in the command line.

So, by this way we can call the SSIS package from the Stored Procedure by using "xp_cmdsjell" and "dtexec" command from the SQL Server. and we will never face the problems which we may get during calling of SSIS from Web service.

Resources

"xp_cmdshell" and "dtexec" also can be used for many more functionality, following are the links for both command which will describe both in details for their syntax and usage.

dtexec : http://msdn.microsoft.com/en-us/library/ms162810.aspx
xp_cmdshell : http://www.databasejournal.com/features/mssql/article.php/3372131

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPL)

About the Author

JustChiragPatel


Member
Chirag Patel, a Programmer Analyst in a well known IT company working on .NET Technologies since last 2 years. He is interested in Pure business logic and fuzzy logic. his area of interest is in C#.NET, VB.NET and MSSQL 2005.

catch me on: http://groups.google.com/group/codewar
Occupation: Software Developer
Location: India India

Other popular Database articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 11 of 11 (Total in Forum: 11) (Refresh)FirstPrevNext
GeneralExecute SSIS using asp.net PinmemberMember 34742769:19 24 Feb '09  
GeneralCool Job, but... PinmemberJanWaiz4:16 23 Jan '09  
GeneralGreat Article but One Small Suggestion PinmemberRick.Weyenberg5:48 6 Jan '09  
QuestionRe: Great Article but One Small Suggestion PinmemberSuperLeftGiggleFoot7:33 15 Apr '09  
GeneralHow I can execute SSIS package using c#.net (2.0) (using com object) ? PinmemberParesh Gujarathi22:59 10 Jul '08  
GeneralRe: How I can execute SSIS package using c#.net (2.0) (using com object) ? Pinmemberpvyaka0110:22 11 Jul '08  
GeneralRe: How I can execute SSIS package using c#.net (2.0) (using com object) ? PinmemberParesh Gujarathi0:31 12 Jul '08  
GeneralRe: How I can execute SSIS package using c#.net (2.0) (using com object) ? Pinmemberivppjain7:22 10 Jan '09  
GeneralDoes anyone know how to do this WITHOUT xp..cmdshell? PinmemberMember 38792736:47 26 Jan '09  
AnswerRe: Does anyone know how to do this WITHOUT xp..cmdshell? PinmemberSuperLeftGiggleFoot7:23 15 Apr '09  
GeneralRe: Does anyone know how to do this WITHOUT xp..cmdshell? PinmemberMember 38792739:07 15 Apr '09  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 20 Jun 2008
Editor:
Copyright 2008 by JustChiragPatel
Everything else Copyright © CodeProject, 1999-2009
Web22 | Advertise on the Code Project