SSIS control flow 2 out of 3 - ssis

I have a package where I want to have task A always run and B or C run (but not both) and I want them to run concurrently before they (all three) go to the next task. So I know how to set the constraints so that either B or C succeeds but adding in A is a problem. In the Multiple Constraints part of the editor I need another option to point to the task (A) that is AND while the other two tasks are OR.
Anybody know a way to work around that?

Related

How to from one SSIS project execute sql task that is located in another SSIS project

I have two SSIS projects within the same folder - let's call them Parent.dtsx and Child.dtsx.
Child solution has many SQL task split by different Sequence Containers.
What I need to do is to (in Parent) execute SQL task from (Child). I don't want to execute whole Child solution, only part of it.
I has been searching for a proper solution for a while, but I haven't found a proper answer yet.
Every Parent-Child solution I've seen presents how to execute whole solution (Child) within Parent one.
I tried to execute selected tasks from Child solution by passing the SQL task ID to the Execute Package Task but if failed. Probably, I don't want to pass any variables from Child to Parent - I just need to execute selected SQL tasks from Child.
I'm a beginner when it comes to SSIS.
Thanks,
Karol
Every Parent-Child solution I've seen presents how to execute whole
solution (Child) within Parent one.
That's because that's the only way it works. There is no way to call only some elements of a child package from a parent package; you can only execute the entire child package, unless you want to get into some extremely complicated low-level coding in a script task.
You need to decide where your tipping point is, and do one of the following (whichever is more desirable in your case):
Copy the SQL Task from your Child package and paste it into your parent package, and just have everything in one package.
Modify your child package so that you can pass it a variable, and only execute certain tasks based on the variable that is passed.
Make your solution even more modular: Take the Task you want to execute out of the child package, and put it in its own package all by itself. Then you can call that third package from the child package, and/or you call it directly from the parent package.
Those are your best options.
EDIT: An idea of how to do option 2 - Add a variable to the child package. In the precedence constraints before each task, check the variable, and if it isn't a certain value, then skip that step.
In other words, from your first step, (which may have to be a "dummy" script, because it is going to get executed every time the package starts no matter what), you have multiple constraints coming out. One that says if the first step is complete and the variable equals some value, go to step 2. Another that says if the first step is complete and the variable equals some other value, go to step 3, and so on and so on.
And then from your parent package, you pass whatever variable value will tell the child package to only execute the task you want to execute.
It ends up looking pretty ugly, because you have precedence constraints all over the place, but we have used it in the past and it works. It won't be too bad if you only have two possible paths you want the execution to take.

How to populate 10 different query results with different columns and number of columns to a text file in MSSQL

I am doing a project to generate data extracts on a daily basis. I have ten different queries with different columns and also the number of columns are also different. the database is MSSQL server 2008 R2 and I tried SSIS packet to accomplish the result.I used the components datasource, then a sort and the result of the sort to merge and then to text file. But I am getting error when combining the result saying the columns are different or something. Can anyone suggest a solution or is there any other way to accomplish this.
thanks,
Sivajith
Can you please provide error message? The merge component can merge data flows with various amount of columns, by selecting for the input columns.
First create a template .csv file which contain all the columns from the queries (i.e. if you have the columns A B C in the first query, B, E, F in the 2nd , B , X, Y in the third and so on, make sure your template file will have A B C E F X Y)
Make 10 tasks (one for each query). As a source use sql from command and write your query. As a destination, use the template file created above. Make sure you uncheck "Overwrite data".
Use the same destination for all the queries.
This should do the trick. I am not sure that I completely understood your question since it's a little big vague.
Here are the following reference that may help you a bit more:
SQL Server : export query as a .txt file
You will have to make sure you have a proper connection to the SQL server and then run this as a powershell or a .bat file. This can be scheduled to run daily as well.

SSIS 2012 Transaction in ForEach Loop

I have a package that iterates several times, one for each Category. I put a transaction in the package such that each Category completes in full or not at all. If I have 3 Categories, A B and C, and Category B fails, I want to ensure that A and C will run successfully. However, currently, when B fails, the package execution halts with an error instead of moving on to the next Category.
I have a ForEach Loop container that iterates over the Categories. Inside that, I have a sequence container with the Transaction option set to Required. This should make each iteration its own transaction.
How do I get that package to move onto the next Category when another Category fails and rolls back?
Thanks in advance for any help.
Change the maximum error count of the Loop container and all parent containers to 3, and changed the "stop package on failure" flag to false. This should allow it to continue looping.
While this should work, I don't advocate this approach. I would split the three transactions into separate containers, connected by "Completion" constraints, since there may be errors that should still halt package execution.

SSIS Precedence Constraint Expression not working

I have an int variable User::FileLineCount scoped in a for loop container and in a task within the loop, I want to proceed from the task depending in this variable's value.
In the Precedence Constraint Editor I have chosen Evaluation Operation as Expression and the Expression as #FileLineCount!=0. There is another version to some other task as #FileLineCount==0. When I debug, I can see that the User::FileLineCount value is 0 but when I step Over the task I get Unable to step. Not Implemented. error.
Thanks for the help
EDIT: Apparently the debugger could not step over so that was the reason for the error but the conditions still do not work properly.
EDIT2:
The other one is #FileLineCount==0. Doesnt work without OR'in as in the picture.
I had two paths leaving a data flow task one would go to a sql task and the other would go to another task. I was struggling with this until I realized that two paths leaving the same data flow task would be an or if they were different paths. I assume that you would use AND if you had multiple tasks going into one task and you needed them all to be true for it to proceed. I'm not sure if this exactly what you are asking.
This would be or, because I want one or the other.
Where below I want all three to be true to continue to send the email.

Controlling the flow in SSIS package based on a condition

Is there a way to conditionally (through a script task or anything else), control the flow of program in SSIS?
Currently I have a package that would create 5 different excel sheets (through Execute SQL Task) dynamically. There maybe times when all 5 will have data or only 1 may have data. When its just 1 that has data, it is fine. But the real problem arises when there are 5 DFT's that are trying to write the data simultaneously to the same workbook (albeit different sheets inside that). The package fails with an OLEDB error.
After a lot of head breaking, I finally figured out that it was a concurrency control issue that wasn't allowing me to write to the excel file simultaneously. To further my solution, I used expressions on precedence constraints to control if the sheets get created or not.
But the real trouble is that after creating the sheets, the package would fail trying to write data to 2 different sheets simultaneously.
Is there a way, I can assign an 'Execution Order' for the DFT's? This is the reason I am looking for a script task so that when a particular sheet's count is 0 then it does no work and the control moves to another branch.
I hope I have not confused you here. But if I have, I'll be glad to provide more details on this question. Thanks for reading.
My first thought is to have a bunch of sequence containers, one per possible Excel sheet, each of which holds three tasks:
A script task to figure out whether or not to create the sheet, and set a boolean package variable accordingly
An SQL task to create the worksheet
A data flow task to populate the worksheet
The precedence constraint between tasks 1 and 2 would be an expression of the boolean being true:
The precedence constraint between tasks 2 and 3 would be a success constraint, as would the precedence constraints between the sequence containers. Overall, it would look like this: