Solved

Running an SSIS package when a trigger file arrives on Windows Server using Sql*Agent

Posted on 2013-06-21
16
1,569 Views
Last Modified: 2016-02-11
We are trying to run an SSIS package when a trigger file arrives on Windows Server.

So I need a job to run every 5 minutes, and if it finds my_trigger_file.txt, then run an SSIS package.

What kind of job would this be ? Sql Agent would run the job "check for trigger file", and then Step 1 is to see if the file exists. If it's there, then Step 2 run the SSIS package.

I have little experience with Sql Agent, but mostly looking for - what kind of job polls for the file ? And then if "success", Sql Agent has to know that to run the SSIS package.
0
Comment
Question by:Alaska Cowboy
  • 11
  • 4
16 Comments
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39266660
or, how about this . . . .

my SSIS package is set to run every 5 minutes.

the first step of the package is to look for the trigger file. If it's there, continue. If not, exit gracefully.

- or -
just run my package which tries to load my_trigger_file.txt. If it's not there, then exit gracefully (as opposed to specifically looking for it . . . )
0
 
LVL 1

Accepted Solution

by:
yechan earned 225 total points
ID: 39266670
Have you considered using a Script Task that looks for the file?  If the script task finds a file, set a local variable to indicate that it found a file.  Afterwards, modify the "Precedent Constraint" to check for that value.  If true, continue, otherwise set it to false so that no other tasks are running.
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39266793
Script task sounds good, I'll have a look at that . . .

where do I find precedent constraint ?
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39266807
ok, that scripting . . . I'm going to need a little help with that . . .
0
 
LVL 1

Assisted Solution

by:yechan
yechan earned 225 total points
ID: 39266841
Here is the code that I use in my Script tasks to check for the existence of a file:

string filePath = Dts.Variables["User::cFolderLocation"].Value.ToString();

DirectoryInfo dirInfo = new DirectoryInfo(filePath);

FileInfo[] files = dirInfo.GetFiles("*.zip");

if (files != null && files.Length >= 1)
{
   Dts.Variables["User::vFileExists"].Value = true;
 }
else
{
   Dts.Variables["User::vFileExists"].Value = false;
}

Open in new window


The precedence constraints are the arrows that connect the various tasks.  If you double-click the arrow that connects the Script task with the next task, you'll have to enter the following expression in the expression task:

@[User::vFileExists]==true

So, if the vFileExists variable contains the value "true", it will continue onto the next task, otherwise nothing will happen and the package will go back to sleep.
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39266862
ok, just what I was looking for, thank you. I'll give it a shot.
0
 
LVL 21

Assisted Solution

by:Alpesh Patel
Alpesh Patel earned 25 total points
ID: 39267553
To do that there is a new task "Filewatcher" (3rd party SSIS task). It works like filesystemwatcher of Windows.

It triggers when file came/update/delete as actions are configured on that folder.

you will get it from here


File watcher task
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39272967
PatelAlpesh, sorry, I missed your comment. I will have to check with SSIS admin if they are interested in installing this task.
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39278242
yechan, I need to check for only one file (with a variable name, which I have working).

I think the only thing I need to change is to use "file" instead of "files" for clarity, then say "GetFiles(Dts.Variables("InputFile").Value)

here's your code again:
string filePath = Dts.Variables["User::cFolderLocation"].Value.ToString();

DirectoryInfo dirInfo = new DirectoryInfo(filePath);

FileInfo[] files = dirInfo.GetFiles("*.zip");

if (files != null && files.Length >= 1)
{
   Dts.Variables["User::vFileExists"].Value = true;
 }
else
{
   Dts.Variables["User::vFileExists"].Value = false;
}

Open in new window

0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39278245
also, I am using VB scripting . . .
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39278297
Ok, I got the precedence constraint working, but it's hard coded

Dts.Variables("FileExists").Value = False

I need to get your code in VB language, will try and poke around on this.
0
 
LVL 1

Assisted Solution

by:yechan
yechan earned 225 total points
ID: 39278355
Hi William,

I don't code in VB.net, however, check this link out.  It will convert C# code to vb.net and vice versa.

http://www.developerfusion.com/tools/convert/csharp-to-vb/
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39278444
yechan, great ! thank  you.
0
 
LVL 1

Author Comment

by:Alaska Cowboy
ID: 39278662
I got it to work with this simple command:

        If My.Computer.FileSystem.FileExists(Dts.Variables("InputFile").Value) Then

            Dts.Variables("FileExists").Value = True
        Else
            Dts.Variables("FileExists").Value = False
        End If

so, success !
0
 
LVL 1

Expert Comment

by:yechan
ID: 39278672
Awesome!!!!  Glad to read that you got it to work.
0
 
LVL 1

Author Closing Comment

by:Alaska Cowboy
ID: 39278674
very helpful
0

Featured Post

Do email signature updates give you a headache?

Are you constantly making changes to email signatures? Are the images not formatting how you want them to? Want high-quality HTML signatures on all devices, including on mobiles and Macs? Then, let Exclaimer solve all your email signature problems today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Possible fixes for Windows 7 and Windows Server 2008 updating problem. Solutions mentioned are from Microsoft themselves. I started a case with them from our Microsoft Silver Partner option to open a case and get direct support from Microsoft. If s…
A safe way to clean winsxs folder from your windows server 2008 R2 editions
This tutorial will walk an individual through the steps necessary to enable the VMware\Hyper-V licensed feature of Backup Exec 2012. In addition, how to add a VMware server and configure a backup job. The first step is to acquire the necessary licen…
To efficiently enable the rotation of USB drives for backups, storage pools need to be created. This way no matter which USB drive is installed, the backups will successfully write without any administrative intervention. Multiple USB devices need t…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now