hi,
lets learn how to execute SSIS packages from a stored procedure
This can be done in two ways
a) Creating a job and calling the job from procedure
b)Using Xp_cmdshell Extended stored procedure
Lets look at the first option
Step 1 : Create job in Sql server
go steps on the left side of job menu
Create new step
Select the type and account to run the job
select the package location
use the simple procedure below
CREATE PROCEDURE SSIS_EXE (@JOB_NAME VARCHAR(100)) AS BEGIN EXEC MSDB..SP_START_JOB @JOB_NAME END EXEC SSIS_EXE 'SSIS' Job 'SSIS' started successfully. Go to job activity monitor and refresh depending upon the size of package wait for the success messageor user the below query to find the job status SELECT S.NAME,H.JOB_ID,H.MESSAGE FROM MSDB..SYSJOBHISTORY H INNER JOIN MSDB..SYSJOBS S ON H.JOB_ID = S.JOB_ID WHERE S.NAME = 'SSIS'
Using Xp_cmdshell system stored procedure: This is the best and the easy way we pass the parameter as the package location, package path, and server name to the stored procedure Before jumping in to the code let's make sure the XP_Cmdshell extended procedure is turned on you machine Use the below mentioned procedure to turn on XP_CMDSHELL -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO and here's the procedure CREATE PROCEDURE SSIS_XP (@LOCATION VARCHAR(1000),@PATH VARCHAR(100),@SERVERNAME VARCHAR(40)) AS DECLARE @CMD VARCHAR(1000) BEGIN IF @LOCATION = 'FILESYSTEM' IF(@SERVERNAME IS NULL OR PATINDEX('%[a-z]%',@SERVERNAME)= 0 ) PRINT 'PLEASE PROVIDE VALID SERVER NAME' ELSE BEGIN SET @CMD = 'DTEXEC /DTS "\FILE SYSTEM\'+@PATH +'" /SERVER "'+ @SERVERNAME + '" /CHECKPOINTING OFF /REPORTING V' IF @LOCATION = 'MSDB' IF(@SERVERNAME IS NULL OR PATINDEX('%[A-Z]%',@SERVERNAME)= 0 ) PRINT 'PLEASE PROVIDE VALID SERVER NAME' ELSE BEGIN SET @CMD = @CMD + 'DTEXEC /DTS "\MSDB'+@PATH +'" /SERVER "'+ @SERVERNAME + '" /CHECKPOINTING OFF /REPORTING V' IF @LOCATION = 'FILE' BEGIN SET @CMD = @CMD + 'DTEXEC /FILE'+@PATH +'.DTSX" /CHECKPOINTING OFF /REPORTING V' END END END ELSE BEGIN PRINT 'PLEASE SPECIFY CORRECT PACKAGE LOCATION' END -- EXEC MASTER..XP_CMDSHELL @CMD END how to use EXEC SSIS_XP 'FILESYSTEM' ,'PACKAGES\PACKAGE' ,'--servername--' or EXEC SSIS_XP 'MSDB' ,'SSIS\PACKAGE1' ,'--servername--' or EXEC SSIS_XP 'FILE' ,'C:\Programfiles\mydocuments\SSIS\PACKAGE1' ,'--servername--'
We can still have lot parameters like reporting , configurations, variable values to make it complicated Data driven package execution A) CURSOR Create a table CREATE TABLE [dbo].[PACKAGES]( [PATH] [varchar](100) NULL, [LOCATION] [varchar](1000) NULL, [SERVERNAME] [varchar](40) NULL ) ON [PRIMARY] Insert the records as required by the packages crate a cursor to loop through the table for packages DECLARE @PATH VARCHAR(1000) DECLARE @LOCATION VARCHAR(50) DECLARE @SERVERNAME VARCHAR(40) DECLARE DATA_PACKAGE CURSOR FOR SELECT [PATH],LOCATION,SERVERNAME FROM DBO.PACKAGES OPEN DATA_PACKAGE FETCH NEXT FROM DATA_PACKAGE INTO @PATH,@LOCATION,@SERVERNAME WHILE @@FETCH_STATUS = 0 BEGIN EXEC SSIS_XP @LOCATION,@PATH,@SERVERNAME FETCH NEXT FROM DATA_PACKAGE INTO @PATH,@LOCATION,@SERVERNAME END CLOSE DATA_PACKAGE DEALLOCATE DATA_PACKAGE B) we can create a simple package to do above cursor action in SSIS if you don't like cursor step1) drag and drop a data flow task in control flow
and a OLEDB source and OLEDB command in data flow
Map the parameters to the procedure
![]()
any questions please comment below
Akhil Bhaiyya ,,, nuvvu keka
thanks kind usefull to me XD