<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'Design Pattern' and 'ETL Instrumentation'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=Design+Pattern,ETL+Instrumentation&amp;orTags=0</link><description>Search results matching tags 'Design Pattern' and 'ETL Instrumentation'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SSIS Design Patterns, the Book</title><link>http://sqlblog.com/blogs/andy_leonard/archive/2012/08/06/ssis-design-patterns-the-book.aspx</link><pubDate>Mon, 06 Aug 2012 16:37:43 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:44587</guid><dc:creator>andyleonard</dc:creator><description>&lt;p&gt;For the past two years, I have had the honor and privilege or authoring &lt;a href="http://www.amazon.com/SSIS-Design-Patterns-Matt-Masson/dp/1430237716" target="_blank"&gt;SSIS Design Patterns&lt;/a&gt; alongside Jessica Moss, Michelle Ufford, Tim Mitchell, and Matt Masson. Publication of the book – like many projects of this scope – has been delayed. The current publication date is 27 Aug 2012 and I have high confidence in this date. &lt;/p&gt;  &lt;p&gt;I take responsibility for publication delays and apologize to those who pre-ordered the book. The reasons for the delays are not important. I have built a career as a software developer and architect based on the following maxim:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Deliver quality late, no one remembers.       &lt;br /&gt;Deliver junk on time, no one forgets.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The shared goal of everyone working on this project has been to deliver quality. Proofing the manuscripts, I believe we have achieved that goal. &lt;/p&gt;  &lt;p&gt;:{&amp;gt;&lt;/p&gt;</description></item><item><title>SSIS Design Pattern - ETL Instrumentation, Part 4</title><link>http://sqlblog.com/blogs/andy_leonard/archive/2007/12/26/ssis-design-pattern-etl-instrumentation-part-4.aspx</link><pubDate>Wed, 26 Dec 2007 07:50:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:4182</guid><dc:creator>andyleonard</dc:creator><description>&lt;FONT face=Verdana color=#000080&gt;
&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;This post is part of a series of posts on ETL Instrumentation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In &lt;/FONT&gt;&lt;FONT face=Verdana color=#0000ff&gt;&lt;A class="" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/11/ssis-design-pattern-etl-instrumentation-part-1.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff&gt;Part 1&lt;/A&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080&gt; we built a database to hold collected SSIS run time metrics and an SSIS package to deomnstrate how and why we would load metrics into the database.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In &lt;/FONT&gt;&lt;A class="" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/11/ssis-design-pattern-etl-instrumentation-part-2.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff&gt;Part 2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana color=#000080&gt; we expanded on our database and the SSIS package to annotate version metadata, manage error metrics capture, and task status reporting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In &lt;A class="" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/18/ssis-design-pattern-etl-instrumentation-part-3.aspx" target=_blank&gt;Part 3&lt;/A&gt;, we started using the ETL Instrumentation infrastructure we have built to measure some actual ETL. We started by counting rows.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In Part 4, we continue instrumenting by adding yet another ETL process and again scaling our measurement capabilities.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#000080&gt;A Brief History Of Our ETL Instrumentation Project&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;FONT face=Verdana color=#000080&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;To review, our&amp;nbsp;metrics database is named SSISRunTimeMetrics. It contains a schema named ssis. In this schema are&amp;nbsp;eleven objects:&lt;BR&gt;&amp;nbsp;- a table named ssis.RunTimeMetrics.&lt;BR&gt;&amp;nbsp;- a table named ssis.RunTimeErrors.&lt;BR&gt;&amp;nbsp;- a table named ssis.TaskMetrics.&lt;BR&gt;&amp;nbsp;- a table named ssis.RowCounts.&lt;BR&gt;&amp;nbsp;- a table named ssis.RowCountTypes.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageStart.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageEnd.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageError.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordTaskStart.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordTaskEnd.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordRowCounts.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Our source database is AdventureWorks and our destination database is SSISRunTimeMetrics_Target. SSISRunTimeMetrics_Target contains one object:&lt;BR&gt;&amp;nbsp;- a table named dbo.Contact.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;We&amp;nbsp;expanded&amp;nbsp;the types of run-time data we are collecting.&amp;nbsp;Part 1 introduced Status collection, in Part 2 we added Exception collection. We also introduced scope into both types of collection, recording Exception information on error &lt;EM&gt;and&lt;/EM&gt; finalizing Status (reporting that an error occurred).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;At the beginning of SSIS package execution, we call ssis.usp_RecordPackageStart from an Execute SQL Task. We pass the package start date and time, the package name, and the package version. We also pass in a status of "Started". From this stored procedure we get the ID of the newly created row, which we then push into a Package Load ID variable (iPackageLoadID).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;At the beginning of a task or collection of tasks that define a process, we call ssis.usp_RecordTaskStart from an Execute SQL Task. We pass the task or process start date and time, the task (source) name, iPackageLoadID, and a status of "Started". From this stored procedure we get the ID of the newly created row, which we then push into a Task Load ID variable (iTaskLoadID).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;We have a Data Flow Task to move rows from the AdventureWorks.Person.Contact table to a target database and table we created: SSISRunTimeMetrics_Target.dbo.Contact. We optimized the package for set-based updates and collect row count metrics which are inserted into SSISRunTimeMetrics.ssis.usp_RecordRowCounts.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;When this&amp;nbsp;task completes, we call ssis.usp_RecordTaskEnd from an Execute SQL Task. We pass in the Task Load ID from the iTaskLoadID variable, the current date and time, and the status "Succeeded".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;On error, we capture Exception data and record an Error Status - both are crucial to &lt;EM&gt;knowing&lt;/EM&gt; what happens when an exception is thrown.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;When the package completes execution, we call ssis.usp_RecordPackageEnd from an Execute SQL Task. We pass in the Package Load ID from the variable, the current date and time, and the status "Succeeded".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Let's get started on the next step!&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;Version Control&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;First, update version information:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_01.png"&gt;&lt;/P&gt;
&lt;P&gt;Remember to update Version properties:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_02.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now we are ready to start developing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sell, Sell, Sell&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Let's&amp;nbsp;extract and load&amp;nbsp;some Sales data.&lt;/P&gt;
&lt;P&gt;Open the SSISRunTimeMetrics package&amp;nbsp;you&amp;nbsp;built&amp;nbsp;previously. Delete the Success Precedence Constraint between the "Step 1 - Load Contact" Sequence Container and the "Log End of Package Execution" Execute SQL Task. &lt;/P&gt;
&lt;P&gt;Drag a Sequence Container onto the Control Flow canvas. Move the "Log End of Package Execution" Execute SQL Task down some and position the new Sequence Container between the "Step 1 - Load Contact" Sequence Container and the "Log End of Package Execution" Execute SQL Task. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;Connect the "Step 1 - Load Contact" Sequence Container to the new Sequence Container with a Success Precedence Constraint, and the new Sequence Container to the "Log End of Package Execution" Execute SQL Task with a Success Precedence Constraint.&lt;/P&gt;
&lt;P&gt;Rename the new Sequence Container "Step 2 - Load Sales".&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_03.png"&gt;&lt;/P&gt;
&lt;P&gt;Good design is reuseable. Maybe not 100%, but most good designs are at least partially reuseable. Such is the case here - we have a good design in "Step 1 - Load Contact" - we will reuse lots of it in "Step 2 - Load Sales". Let's frame-out the flow, then fill in the details.&lt;/P&gt;
&lt;P&gt;Drag&amp;nbsp;two Execute SQL Tasks and a Data Flow Task into "Step 2 - Load Sales".&lt;/P&gt;
&lt;P&gt;Name the first Execute SQL Task "Load Sales" and double-click it to open the editor. Set the ResultSet property to "Single row" and the Connection property to "(local).SSISRunTimeMetrics". Enter the following in the SQLStatement property:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordTaskStart ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,NULL,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Started'&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_04.png"&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana&gt;On the Parameter Mappings page, add two input parameters. Set Parameter 0 to Long data type and supply the User::iPackageLoadID variable. Set Parameter 1 to VarChar data type and supply the System::TaskName variable:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_05.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;On the Result Set page, add one&amp;nbsp;Result named 0 aimed at the&amp;nbsp;User::iTaskLoadID variable:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:391px;HEIGHT:76px;" height=76 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_06.png" width=391&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Before proceeding, note that this Execute SQL Task is also the product of good design. In fact, the only difference task and it's counterpart in "Step 1 - Load Contact" is the name of the task itself. Everything else is identical.&lt;/P&gt;
&lt;P&gt;So why not copy and paste the task? Good question - we certainly could have! And we will copy and paste other tasks starting now.&lt;/P&gt;
&lt;P&gt;Connect a Success Precedence Constraint from the "Load Sales" Execute SQL Task to the Data Flow Task. We need to do some cleanup here before proceeding. In the "Step 1 - Load Contact" Sequence Container there's a Data Flow Task named "Data Flow Task". We have one of those in our "Step 2 - Load Sales" Sequence Container as well. This is permissible because the objects are in different containers and have different scope. &lt;/P&gt;
&lt;P&gt;It robs us of an important navigation&amp;nbsp;facility - one we will likely need: the ability to use the Data Flow Task tab's dropdown box. Have a look:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_07.png"&gt;&lt;/P&gt;
&lt;P&gt;To remedy this, let's rename the Data Flow Task in&amp;nbsp;"Step 1 - Load Contact" "Load Contact Data". Similary, let's rename the "Step 2 - Load Sales" Data Flow Task "Load Sales Data".&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_08.png"&gt;&lt;/P&gt;
&lt;P&gt;There. Much better.&lt;/P&gt;
&lt;P&gt;Connect the "Load Sales Data" Data Flow Task to&amp;nbsp;the second Execute SQL Task with a Success Precedence Constraint&amp;nbsp;and rename&amp;nbsp;it (the second Execute SQL Task)&amp;nbsp;"Apply Staged Updates". Double-click it to open the editor and set the Connection property to "(local).SSISRunTimeMetrics_Target". We will return to this task later - click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Copy the "Log Successful End of Task" Execute SQL Task&amp;nbsp;from the "Step 1 - Load Contact" Sequence Container and paste it onto the Data Flow canvas. Then drag it into the the "Step 2 - Load Sales" Sequence Container. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Note: You can paste it directly into the "Step 2 - Load Sales" Sequence Container if you want to, but I recommend you not do this in SSIS 2005. The Sequence Container will expand to accomodate anything inside it, and the paste functionality in SSIS 2005 completely ignores the mouse pointer position (and eveything else, so far as I can tell) when you paste from the clipboard. Combined, these behaviors cause sequence containers to grow&amp;nbsp;unpredictably large when you paste directly into them.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;No modifications are required for the "Log Successful End of Task" Execute SQL Task to function as desired in the new sequence container - how cool is that?&lt;/P&gt;
&lt;P&gt;Copy the "Log Failed End Of Task" Execute SQL Task and paste it onto the Control Flow canvas.&amp;nbsp;The new task&amp;nbsp;will show up named "Log Failed End Of Task 1". Again, a naming convention conflict. To resolve it, rename the original "Log Failed End Of Task" Execute SQL Task - connected to the "Step 1 - Load Contact" Sequence Container via a Failure Precedence Constraint - to "Log Failed End of Load Contact Task".&lt;/P&gt;
&lt;P&gt;Rename the newly pasted "Log Failed End Of Task 1" Execute SQL Task to "Log Failed End Of Load Sales Task" and connect the "Step 2 - Load Sales" Sequence Container to "Log Failed End Of Load Sales Task" via a Failure Precedence Constraint. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_09.png"&gt;&lt;/P&gt;
&lt;P&gt;Copy the "Record Row Count" Execute SQL Task&amp;nbsp;from the "Step 1 - Load Contact" Sequence Container. Again, paste it onto the Control Flow canvas and then drag it into the "Step 2 - Load Sales" Sequence Container. Connect the "Log Successful End Of Task" Execute SQL Task to the "Record Row Count" Execute SQL Task with a Success Precedence Constraint and double-click the task to open the editor.&lt;/P&gt;
&lt;P&gt;All is well with the General page, but the Parameter Mapping page reveals some poor variable-naming choices in the last exercise. We can fix this in the variable dropdown. Click the dropdown that currently contains the User::iContactCount variable and select &amp;lt;New variable...&amp;gt;: &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_10.png"&gt;&lt;/P&gt;
&lt;P&gt;When the Add Variable dialog displays, click the Container dropdown and select the package ("SSISRunTimeMetrics"). This determines the scope of the variable and we want a package-scoped variable.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_11.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to select the&amp;nbsp;package scope.&amp;nbsp;Set the Name of the variable to iSalesInputCount, the Value Type (data type) to Int32, and the Value to 0:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_12.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the Add Variable dialog. &lt;/P&gt;
&lt;P&gt;Repeat the procedure above for the "Counts" variables. Name the remaining three Counts variables iSalesNewRowsCount, iSalesChangedRowsCount, and iSalesUnchangedRowsCount; respectively. When complete, the Parameter Mapping page should appear as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_13.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;The flow is now framed-out. We are ready to begin our Sales-specific coding.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Building&amp;nbsp;The LZ (Landing Zone)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We need a place for our Sales data to land in SSISRunTimeMetrics_Target database. &lt;/P&gt;
&lt;P&gt;In this section I am going to walk through the first phase of the process of converting a well-designed OLTP schema into a denormalized schema. &lt;/P&gt;
&lt;P&gt;We'll start with the AdventureWorks Sales schema. First, let's list all the tables in the Sales schema using the following query:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; AdventureWorks&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sales'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;This gives us a list of tables in the Sales schema:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;
&lt;P&gt;Sales.StoreContact &lt;BR&gt;Sales.ContactCreditCard &lt;BR&gt;Sales.CountryRegionCurrency &lt;BR&gt;Sales.CreditCard &lt;BR&gt;Sales.Currency &lt;BR&gt;Sales.SalesOrderDetail &lt;BR&gt;Sales.CurrencyRate &lt;BR&gt;Sales.Customer &lt;BR&gt;Sales.SalesOrderHeader &lt;BR&gt;Sales.CustomerAddress &lt;BR&gt;Sales.SalesOrderHeaderSalesReason &lt;BR&gt;Sales.SalesPerson &lt;BR&gt;Sales.SalesPersonQuotaHistory &lt;BR&gt;Sales.SalesReason &lt;BR&gt;Sales.Individual &lt;BR&gt;Sales.SalesTaxRate &lt;BR&gt;Sales.SalesTerritory &lt;BR&gt;Sales.SalesTerritoryHistory &lt;BR&gt;Sales.ShoppingCartItem &lt;BR&gt;Sales.SpecialOffer &lt;BR&gt;Sales.SpecialOfferProduct &lt;BR&gt;Sales.Store&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Let's select Sales.SalesOrderDetail as our base table... we have to start somewhere. Open SQL Server Management Studio and connect the Object Browser to your local (or development) instance of SQL Server 2005. Expand Databases, then AdventureWorks, then Tables:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_14.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Scroll down to Sales.SalesOrderDetail. Right-click the table object in Object Browser. Hover over "Script Table as", then "CREATE To", and click "New Query Editor Window":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_15.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This creates a nice&amp;nbsp;CREATE script (and more)&amp;nbsp;for the Sales.SalesOrderDetail table. I only need the CREATE TABLE portion so I remove the rest. I modify the script&amp;nbsp;further - making the table part of the dbo schema. I discard the constraints, NOT NULLs,&amp;nbsp;brackets, and extended properties and I'm left with:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=blue&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;SalesOrderDetail&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderID&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderDetailID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;CarrierTrackingNumber &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;nvarchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;OrderQty &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;smallint&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;ProductID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SpecialOfferID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPrice &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPriceDiscount &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;LineTotal &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;rowguid &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;ModifiedDate &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Repeating the process for the Sale.SalesOrderHeader table yields:&lt;/P&gt;&lt;FONT face="courier new" color=#000000 size=2&gt;
&lt;P&gt;&lt;FONT color=blue&gt;CREATE TABLE&lt;/FONT&gt; dbo.SalesOrderHeader( &lt;BR&gt;SalesOrderID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;RevisionNumber &lt;FONT color=blue&gt;tinyint&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;OrderDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;DueDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Status &lt;FONT color=blue&gt;tinyint&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;OnlineOrderFlag &lt;FONT color=blue&gt;bit&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesOrderNumber &lt;FONT color=blue&gt;nvarchar(25)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;PurchaseOrderNumber &lt;FONT color=blue&gt;nvarchar(25)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;AccountNumber &lt;FONT color=blue&gt;nvarchar(15)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CustomerID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ContactID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesPersonID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TerritoryID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt; &lt;BR&gt;BillToAddressID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipToAddressID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipMethodID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CreditCardID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CreditCardApprovalCode &lt;FONT color=blue&gt;varchar(15)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CurrencyRateID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SubTotal &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TaxAmt &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Freight &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TotalDue &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Comment &lt;FONT color=blue&gt;nvarchar(128)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;rowguid &lt;FONT color=blue&gt;uniqueidentifier&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ModifiedDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;) &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;I can now combine these statements, removing the duplication,&amp;nbsp;to create a destination table statement:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=blue&gt;&lt;FONT color=#0000ff size=2&gt;CREATE&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;SalesOrderHeaderDetail&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderID&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderDetailID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;CarrierTrackingNumber &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;nvarchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;OrderQty &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;smallint&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;ProductID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SpecialOfferID &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPrice &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPriceDiscount &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;LineTotal &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;money&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderDtatilrowguid &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderDetailModifiedDate &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new" color=#000000 size=2&gt;&lt;BR&gt;RevisionNumber &lt;FONT color=blue&gt;tinyint&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;OrderDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;DueDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Status &lt;FONT color=blue&gt;tinyint&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;OnlineOrderFlag &lt;FONT color=blue&gt;bit&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesOrderNumber &lt;FONT color=blue&gt;nvarchar(25)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;PurchaseOrderNumber &lt;FONT color=blue&gt;nvarchar(25)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;AccountNumber &lt;FONT color=blue&gt;nvarchar(15)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CustomerID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ContactID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesPersonID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TerritoryID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL,&lt;/FONT&gt; &lt;BR&gt;BillToAddressID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipToAddressID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;ShipMethodID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CreditCardID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CreditCardApprovalCode &lt;FONT color=blue&gt;varchar(15)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;CurrencyRateID &lt;FONT color=blue&gt;int&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SubTotal &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TaxAmt &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Freight &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;TotalDue &lt;FONT color=blue&gt;money&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;Comment &lt;FONT color=blue&gt;nvarchar(128)&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesOrderHeaderrowguid &lt;FONT color=blue&gt;uniqueidentifier&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;, &lt;BR&gt;SalesOrderHeaderModifiedDate &lt;FONT color=blue&gt;datetime&lt;/FONT&gt; &lt;FONT color=gray&gt;NULL&lt;/FONT&gt;) &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Execute this statement against the SSISRunTimeMetrics_Target database to create our destination table. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Filling In The Blanks&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Double-click the "Load Sales Data" Data Flow Task to switch to the Data Flow tab for editing. Drag an OLE DB Source Adapter onto the canvas and double-click it to open the editor. Select the (local).AdventureWorks connection manager. Change the Data access mode to Sql Command and enter the following SQL statement into the SQL Command Text textbox:&amp;nbsp;&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; SalesOrderID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SalesOrderDetailID&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;CarrierTrackingNumber&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;OrderQty&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;ProductID&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;SpecialOfferID&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPrice&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;UnitPriceDiscount&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;LineTotal&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;rowguid&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;ModifiedDate&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;FONT color=black&gt;Sales.&lt;FONT size=2&gt;SalesOrderDetail&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the OK button to close the editor. Right-click the Source Adapter and rename it "Sales Detail Source":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_19.png"&gt;&lt;/P&gt;
&lt;P&gt;Drag a second OLE DB Source Adapter onto the Data Flow canvas and double-click it to open the editor. Select "(local).AdventureWorks" as the connection manager and SQL Command as the Data Access Mode. Enter the following statement into the SQL Command Text textbox:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=blue&gt;SELECT&lt;/FONT&gt; SalesOrderID &lt;BR&gt;,RevisionNumber &lt;BR&gt;,OrderDate &lt;BR&gt;,DueDate &lt;BR&gt;,ShipDate &lt;BR&gt;,Status &lt;BR&gt;,OnlineOrderFlag &lt;BR&gt;,SalesOrderNumber &lt;BR&gt;,PurchaseOrderNumber &lt;BR&gt;,AccountNumber &lt;BR&gt;,CustomerID &lt;BR&gt;,ContactID &lt;BR&gt;,SalesPersonID &lt;BR&gt;,TerritoryID &lt;BR&gt;,BillToAddressID &lt;BR&gt;,ShipToAddressID &lt;BR&gt;,ShipMethodID &lt;BR&gt;,CreditCardID &lt;BR&gt;,CreditCardApprovalCode &lt;BR&gt;,CurrencyRateID &lt;BR&gt;,SubTotal &lt;BR&gt;,TaxAmt &lt;BR&gt;,Freight &lt;BR&gt;,TotalDue &lt;BR&gt;,Comment &lt;BR&gt;,rowguid &lt;BR&gt;,ModifiedDate &lt;BR&gt;&lt;FONT color=blue&gt;FROM&lt;/FONT&gt; Sales.SalesOrderHeader &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_20.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;Click the OK button to close the editor and rename the Source Adapter "Sales Header Source".&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;Drag a Merge Join onto the Data Flow canvas and connect a Data Flow Path (green arrow) from each Source Adapter to the Merge Join:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_21.png"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;Note the Merge Join has an error - the Left Input is not sorted. (Neither is the Right Input, but validation fails on, and reports,&amp;nbsp;the first error). To address this condition, right-click each Source Adapter and select Show Advanced Editor:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;Click on the Input and Output Properties tab and expand the OLE DB Source Output object, then expand the Output Columns logical folder. Click on the OLE DB Source Output object (which represents the Output buffer) and change the IsSorted property to True:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_22.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;In the Output Columns list, click on the SalesOrderID column and change the SortKeyPosition property to 1:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_23.png"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT face=Verdana color=#000080&gt;Click the OK button to close the Advanced Editor. Double-click the source adapter to open the editor and append an Order By clause to the SQL Command: "ORDER BY SalesOrderID". Close the editor and repeat this process for the other Source Adapter.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;But wait - we still have an error:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_24.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Double-click the Merge Join to open the editor. Click every column from the Left input and every column except SalesOrderID from the Right Input. Two columns are named the same in both tables - rowguid and ModifiedDate. To differentiate, prepend each column's Output Alias with the table name:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_25.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor. The error clears.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ok&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We did all that to set this up.&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Count&amp;nbsp;'Em Up&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As with the Contacts data, we will count the rows entering the process. Depending on the nature of the process, source data, and desired measurement(s); you may choose to measure immediately after the Source Adapters or after the Merge Join - or both. We'll start with the same kind of counts measurements we built in the Contacts data flow.&lt;/P&gt;
&lt;P&gt;Drag a Row Count&amp;nbsp;transformation onto the Data Flow canvas and connect the output of the Merge Join to its input. Double-click the Row Count to open the editor and assign the User::iSalesInputCount to the VariableName property:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_26.png"&gt;&lt;/P&gt;
&lt;P&gt;As with the Contacts data, our next steps are to correlate and filter the data, so drag a Lookup and Conditional Split transformation onto the data flow canvas and connect them (in respective order) to the Row Count transformation:&lt;/P&gt;
&lt;P&gt;Double-click the Lookup to open the editor and assign the following properties:&lt;BR&gt;OLE DB Connection Manager: (local).SSISRunTimeMetrics_Target&lt;BR&gt;Table or View: dbo.SalesOrdeHeaderDetail&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Columns tab, right-click in the white-space, and click Select All Mappings. Right-click again and select Delete Selected Mappings. Connect the SalesOrderID and SalesOrderDetailID columns. Select every column in the Available Lookup Columns list by checking each checkbox, then prepend each Output Alias with "Dest_":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_27.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Configure Error Output button and change the Lookup Error from "Fail Component" to&amp;nbsp;"Ignore Failure". Remember, this converts the default INNER JOIN&amp;nbsp;functionality of the Lookup transformation into a LEFT OUTER JOIN. Click the OK button to close the Error Output Configuration, then click the OK button again to close the Lookup editor.&lt;/P&gt;
&lt;P&gt;We are loading the pipeline with lookup data in our data flow that matches data - by SalesOrderID and SalesOrderDetailID -&amp;nbsp;in the destination.&lt;/P&gt;
&lt;P&gt;Connect the output data flow path of the Lookup of the Lookup transformation to the Conditional Split transformation and double-click the Conditional Split transformation to open the editor. Create a new output named "New Sales" with the Condition: "IsNull(Dest_SalesOrderDetailID)". If the LEFT OUTER JOIN functionality of the Lookup returns a NULL Dest_SalesOrderDetailID - and really every destination column will be NULL if there's no matching destination row, we could use any of them - then this is a new Sales data row.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_28.png"&gt;&lt;/P&gt;
&lt;P&gt;Add a second condition named "Changed Sales" with the following condition expression:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;
&lt;P&gt;(ISNULL(Dest_RevisionNumber) ? -1 : Dest_RevisionNumber) != (ISNULL(RevisionNumber) ? -1 : RevisionNumber) || (ISNULL(Dest_OrderDate) ? (DT_DBDate)0 : Dest_OrderDate) != (ISNULL(OrderDate) ? (DT_DBDate)0 : OrderDate) || (ISNULL(Dest_DueDate) ? (DT_DBDate)0 : Dest_DueDate) != (ISNULL(DueDate) ? (DT_DBDate)0 : DueDate) || (ISNULL(Dest_ShipDate) ? (DT_DBDate)0 : Dest_ShipDate) != (ISNULL(ShipDate) ? (DT_DBDate)0 : ShipDate) || (ISNULL(Dest_Status) ? 0 : Dest_Status) != (ISNULL(Status) ? 0 : Status) || (ISNULL(Dest_OnlineOrderFlag) ?&amp;nbsp; TRUE&amp;nbsp; : Dest_OnlineOrderFlag) != (ISNULL(OnlineOrderFlag) ?&amp;nbsp; TRUE&amp;nbsp; : OnlineOrderFlag) || (ISNULL(Dest_SalesOrderNumber) ? "NULL" : Dest_SalesOrderNumber) != (ISNULL(SalesOrderNumber) ? "NULL" : SalesOrderNumber) || (ISNULL(Dest_PurchaseOrderNumber) ? "NULL" : Dest_PurchaseOrderNumber) != (ISNULL(PurchaseOrderNumber) ? "NULL" : PurchaseOrderNumber) || (ISNULL(Dest_AccountNumber) ? "NULL" : Dest_AccountNumber) != (ISNULL(AccountNumber) ? "NULL" : AccountNumber) || (ISNULL(Dest_CustomerID) ? -1 : Dest_CustomerID) != (ISNULL(CustomerID) ? -1 : CustomerID) || (ISNULL(Dest_ContactID) ? -1 : Dest_ContactID) != (ISNULL(ContactID) ? -1 : ContactID) || (ISNULL(Dest_SalesPersonID) ? -1 : Dest_SalesPersonID) != (ISNULL(SalesPersonID) ? -1 : SalesPersonID) || (ISNULL(Dest_TerritoryID) ? -1 : Dest_TerritoryID) != (ISNULL(TerritoryID) ? -1 : TerritoryID) || (ISNULL(Dest_BillToAddressID) ? -1 : Dest_BillToAddressID) != (ISNULL(BillToAddressID) ? -1 : BillToAddressID) || (ISNULL(Dest_ShipToAddressID) ? -1 : Dest_ShipToAddressID) != (ISNULL(ShipToAddressID) ? -1 : ShipToAddressID) || (ISNULL(Dest_ShipMethodID) ? -1 : Dest_ShipMethodID) != (ISNULL(ShipMethodID) ? -1 : ShipMethodID) || (ISNULL(Dest_CreditCardID) ? -1 : Dest_CreditCardID) != (ISNULL(CreditCardID) ? -1 : CreditCardID) || (ISNULL(Dest_CreditCardApprovalCode) ? "NULL" : Dest_CreditCardApprovalCode) != (ISNULL(CreditCardApprovalCode) ? "NULL" : CreditCardApprovalCode) || (ISNULL(Dest_CurrencyRateID) ? -1 : Dest_CurrencyRateID) != (ISNULL(CurrencyRateID) ? -1 : CurrencyRateID) || (ISNULL(Dest_SubTotal) ? 0 : Dest_SubTotal) != (ISNULL(SubTotal) ? 0 : SubTotal) || (ISNULL(Dest_TaxAmt) ? 0 : Dest_TaxAmt) != (ISNULL(TaxAmt) ? 0 : TaxAmt) || (ISNULL(Dest_Freight) ? 0 : Dest_Freight) != (ISNULL(Freight) ? 0 : Freight) || (ISNULL(Dest_TotalDue) ? 0 : Dest_TotalDue) != (ISNULL(TotalDue) ? 0 : TotalDue) || (ISNULL(Dest_Comment) ? "NULL" : Dest_Comment) != (ISNULL(Comment) ? "NULL" : Comment) || (ISNULL(Dest_SalesOrderHeaderModifiedDate) ? (DT_DBDATE)0 : Dest_SalesOrderHeaderModifiedDate) != (ISNULL(SalesOrderHeaderModifiedDate) ? (DT_DBDATE)0 : SalesOrderHeaderModifiedDate) || (ISNULL(Dest_CarrierTrackingNumber) ? "NULL" : Dest_CarrierTrackingNumber) != (ISNULL(CarrierTrackingNumber) ? "NULL" : CarrierTrackingNumber) || (ISNULL(Dest_OrderQty) ? 0 : Dest_OrderQty) != (ISNULL(OrderQty) ? 0 : OrderQty) || (ISNULL(Dest_ProductID) ? -1 : Dest_ProductID) != (ISNULL(ProductID) ? -1 : ProductID) || (ISNULL(Dest_SpecialOfferID) ? -1 : Dest_SpecialOfferID) != (ISNULL(SpecialOfferID) ? -1 : SpecialOfferID)&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Rename the default output "Unchanged Rows". Click the OK button to close the editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Drag an OLE DB Destination Adapter onto the Data Flow canvas and rename it "New Sales Destination". Connect an output of the Conditional Split to the new Destination Adapter. When prompted, select the "New Sales" output of the Conditional Split:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_29.png"&gt;&lt;/P&gt;
&lt;P&gt;Double-click the Destination Adapter ot open the editor. Set the Connection Manager property to (local).SSISRunTimeMetrics_Target. Set the Data Access Mode property to "Table or View" and select the&amp;nbsp;dbo.SalesOrderHeaderDetail table. Click on the Mappings page to automap the pipeline fields to the table columns:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_30.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Drag another OLE DB Destination Adapter onto the Data Flow canvas and rename it "stgSalesChangedRows". Connect an output from the Conditional Split to the new Destination Adapter and select the "Changed Sales" output when prompted. Double-click the Destination Adapter to open the editor. Set the Connection Manager property to (local).SSISRunTimeMetrics_Target and set the Data Access Mode property to "Table or View". Click the New button next to the "Name of the Table or View" dropdown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_31.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to create the stgSalesChangedRows table. Click the Mappings page to automap the columns, then click the OK button to close the editor. &lt;/P&gt;
&lt;P&gt;We now have Sales ETL. &lt;IMG alt=Cool src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-11.gif"&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_32.png"&gt;&lt;/P&gt;
&lt;P&gt;To complete our counts logic, add three Row Count transformations to the Data Flow canvas. Name them "New Rows Count", "Changed Rows Count", and "Unchanged Rows Count". Position "New Rows Count" between the Conditional Split and the "New Sales Destination" Adapter. Double-click to open the editor and set the VariableName property to "User::iSalesNewRowsCount". Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Position the "Changed Rows Count" between the Conditional Split and the stgSalesChangedRows Destination Adapter. Open its editor and set the VariableName property to "User::iSalesChangedRowsCount". &lt;/P&gt;
&lt;P&gt;Open the editor for the "Unchanged Rows Count" transformation and set the VariableName property to "User::iSalesUnchangedRowsCount".&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_33.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Before we leave this section, let's complete the staged updates by returning to the Control Flow and updating the SQLStatement property of the "Apply Staged Updates" Execute SQL Task inside the "Step 2 - Load Sales" Sequence Container with the following statement:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;
&lt;P&gt;&lt;FONT color=blue&gt;UPDATE&lt;/FONT&gt; dest &lt;BR&gt;&lt;FONT color=blue&gt;SET&lt;/FONT&gt; dest.SalesOrderID = stage.SalesOrderID &lt;BR&gt;,dest.CarrierTrackingNumber = stage.CarrierTrackingNumber &lt;BR&gt;,dest.OrderQty = stage.OrderQty &lt;BR&gt;,dest.ProductID = stage.ProductID &lt;BR&gt;,dest.SpecialOfferID = stage.SpecialOfferID &lt;BR&gt;,dest.UnitPrice = stage.UnitPrice &lt;BR&gt;,dest.UnitPriceDiscount = stage.UnitPriceDiscount &lt;BR&gt;,dest.LineTotal = stage.LineTotal &lt;BR&gt;,dest.SalesOrderDtatilrowguid = stage.SalesOrderDtatilrowguid &lt;BR&gt;,dest.SalesOrderDetailModifiedDate = stage.SalesOrderDetailModifiedDate &lt;BR&gt;,dest.RevisionNumber = stage.RevisionNumber &lt;BR&gt;,dest.OrderDate = stage.OrderDate &lt;BR&gt;,dest.DueDate = stage.DueDate &lt;BR&gt;,dest.ShipDate = stage.ShipDate &lt;BR&gt;,dest.Status = stage.Status &lt;BR&gt;,dest.OnlineOrderFlag = stage.OnlineOrderFlag &lt;BR&gt;,dest.SalesOrderNumber = stage.SalesOrderNumber &lt;BR&gt;,dest.PurchaseOrderNumber = stage.PurchaseOrderNumber &lt;BR&gt;,dest.AccountNumber = stage.AccountNumber &lt;BR&gt;,dest.CustomerID = stage.CustomerID &lt;BR&gt;,dest.ContactID = stage.ContactID &lt;BR&gt;,dest.SalesPersonID = stage.SalesPersonID &lt;BR&gt;,dest.TerritoryID = stage.TerritoryID &lt;BR&gt;,dest.BillToAddressID = stage.BillToAddressID &lt;BR&gt;,dest.ShipToAddressID = stage.ShipToAddressID &lt;BR&gt;,dest.ShipMethodID = stage.ShipMethodID &lt;BR&gt;,dest.CreditCardID = stage.CreditCardID &lt;BR&gt;,dest.CreditCardApprovalCode = stage.CreditCardApprovalCode &lt;BR&gt;,dest.CurrencyRateID = stage.CurrencyRateID &lt;BR&gt;,dest.SubTotal = stage.SubTotal &lt;BR&gt;,dest.TaxAmt = stage.TaxAmt &lt;BR&gt;,dest.Freight = stage.Freight &lt;BR&gt;,dest.TotalDue = stage.TotalDue &lt;BR&gt;,dest.Comment = stage.Comment &lt;BR&gt;,dest.SalesOrderHeaderrowguid = stage.SalesOrderHeaderrowguid &lt;BR&gt;,dest.SalesOrderHeaderModifiedDate = stage.SalesOrderHeaderModifiedDate &lt;BR&gt;&lt;FONT color=blue&gt;FROM&lt;/FONT&gt; dbo.SalesOrderHeaderDetail dest &lt;BR&gt;&lt;FONT color=gray&gt;INNER JOIN&lt;/FONT&gt; dbo.stgSalesChangedRows stage &lt;FONT color=blue&gt;ON&lt;/FONT&gt; stage.SalesOrderDetailID = dest.SalesOrderDetailID&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;There. Done and&amp;nbsp;done.&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If You Build It...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Up until now, we've basically followed the same template used for Contacts&amp;nbsp;to construct the Sales ETL. We added some complexity (by design) to grow our understanding of ETL along with our knowledge of SSIS. &lt;/P&gt;
&lt;P&gt;Our ETL&amp;nbsp;measurement is record counts and record counts only. Let's expand on that some by also capturing a monetary&amp;nbsp;sum. This will add even more confidence in our ETL, once we validate (Validation is Part 5). &lt;/P&gt;
&lt;P&gt;Let's begin by creating a new destination table to hold our sums: SSISRunTimeMetrics.ssis.RowSums. Use the following script to create the table:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create RunTimeErrors table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowSums'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff size=2&gt;drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowSums&lt;BR&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowSums&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowSumsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowSum &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;decimal&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;38&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&amp;nbsp;,&lt;FONT color=black size=2&gt;RowSumColumnName&amp;nbsp;&lt;FONT color=#0000ff&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowSumTypeID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;This table is remarkably similar to the ssis.RowCounts table we created to hold Row Count data - and for good reason, the functions of these two tables are remarkably similar. As with the Row Counts data, we need to add a stored procedure to insert Sums data, and another table to hold Inserted Types... or do we? Instead of re-creating the functionality contained in the ssis.RowCountTypes table, let's rename - and expand the purpose of&amp;nbsp;- the table.&lt;/P&gt;
&lt;P&gt;Executing the following script accomplishes this nicely:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- delete RowCountTypes table, if exists...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowCountTypes'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- delete RowTypes table, if exists...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowTypes'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Selected Input Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Input rows selected from a source'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'New Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'New rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Changed Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Changed rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Unchanged Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No changes detected in rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Our stored procedure&amp;nbsp;to accomplish inserts:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordRowSum'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowSum&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowSum&lt;BR&gt;@RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSum &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;decimal&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;38&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSumTypeID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSumColumnName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- insert the run time errors data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowSums&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowSum&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowSumColumnName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowSumTypeID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSum&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSumColumnName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowSumTypeID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;Now that our infrastructure is built we can start using it to load SSIS run time metrics.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Add 'Em Up&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We need variables to hold the sums we intend to collect. Right-click the Control Flow&amp;nbsp;and click Variables. Click the New Variable button and add a package-scoped variable, data type Double, named iSalesInputAmount. Repeat the process for three other Double variables named iSalesNewAmount, iSalesChangedAmount, and iSalesUnchangedAmount.&lt;/P&gt;
&lt;P&gt;There are other ways to load this type of data. The way I choose to demonstrate here is not the cleanest but it clearly exercises the principles of ETL Instrumentation.&lt;/P&gt;
&lt;P&gt;Return to the "Load Sales Data" Data Flow Task and add&amp;nbsp;one each&amp;nbsp;Multicast&amp;nbsp;and Aggregate transformations. Position the Mulitcast between Merge Join and Input Row Count transformations and connect them through it. Rename the Aggregate transformation "Input Line Total" and connect another output of the Multicast to it:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_34.png"&gt;&lt;/P&gt;
&lt;P&gt;Double-click the Aggregate transformation to open the editor and check the LineTotal input column. Select&amp;nbsp;Sum from the Operation column - this will&amp;nbsp;add the total of all the LineTotal columns that&amp;nbsp;pass between the Merge Join and Input Row Count transformations:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_36.png"&gt;&lt;/P&gt;
&lt;P&gt;Add a Script Component to the Data Flow. When prompted for Script Component Type, select Destination:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_35.png"&gt;&lt;/P&gt;
&lt;P&gt;Rename the Script Component "Push InputLineTotal into Input Variable", connect the "Input Line Total" Aggregate transformation to it, and double-click the Script Component to open the editor. &lt;/P&gt;
&lt;P&gt;On the Input Columns page, check the Line Total input. On the Script page, enter iSalesInputAmount in the ReadWriteVariables property and click the Design Script button. In the script editor, enter the following code:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; iAmount &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Double&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Overrides&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; Input0_ProcessInputRow(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ByVal&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; Row &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; Input0Buffer)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; '&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; ' Add your code here&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; '&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;&lt;BR&gt;&amp;nbsp; iAmount = Row.LineTotal&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Overrides&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt; PostExecute()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&amp;nbsp; MyBase&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;.PostExecute()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Me&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=black&gt;.Variables.iSalesInputAmount = iAmount&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Close the Script Editor and click the OK button to clase the Script Component editor. This should load the aggregated value into the iSalesInputAmount variable.&lt;/P&gt;
&lt;P&gt;Drag two each&amp;nbsp;Multicast and three each Aggregate, and Script Component transformations onto the Data Flow canvas. Repeat the procedure outlined above for the New, Changed, and Unchanged Conditional Split outputs - for the iSalesNewAmount, iSalesChangedAmount, and iSalesUnchangedAmount variable values (respectively). Note you do not need a Multicase transformation for the Unchanged output. Sum the LineTotal fields for each output.&lt;/P&gt;
&lt;P&gt;This is a lot of work and there is lots of room for error. Take your time. Double-check your work. Don't take shortcuts. When complete, the New section will look something like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_38.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Load 'Em Up&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Return to the Control Flow - it's time to captue these metrics!&lt;/P&gt;
&lt;P&gt;In the "Step 2 - Load Sales" Sequence Container, rename the "Record Row Count" Execute SQL Task "Record Metrics". Double-click it to open the editor. Click the ellipsis on the SQLStatement property and add the following script to the existing statement:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowSum ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sales.SalesOrderDetail.LineTotal'&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowSum ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sales.SalesOrderDetail.LineTotal'&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowSum ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sales.SalesOrderDetail.LineTotal'&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowSum ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sales.SalesOrderDetail.LineTotal'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the Parameter Mapping page and add&amp;nbsp;twelve parameters. With the existing&amp;nbsp;twelve parameters, the new twelve are numbered 12 - 23:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_4_39.png"&gt;&lt;/P&gt;
&lt;P&gt;The parameters follow the pattern iPackageLoadID (Input, Long, Incrementally Numbered), iTaskLoadID (Input, Long, Incrementally Numbered), iSales___Amount (Input, Double, Incrementally Numbered). &lt;/P&gt;
&lt;P&gt;Click the Ok button to close the editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Testing, One, Two, Three...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Execute the package to test the Summing functionality. The following represents a better report query for our collected data:&lt;/P&gt;&lt;FONT face="courier new" color=black&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSiSRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowSum &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Measurement'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Sum'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'MeasurementType'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;st&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskMetrics t&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetrics m &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowSums s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowTypes st &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; st&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowSumTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowSum &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;union&lt;BR&gt;&lt;BR&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;[RowCount] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Measurement'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Counts'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'MeasurementType'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ct&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskMetrics t&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetrics m &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowCounts c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowTypes ct &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ct&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;[RowCount] &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Again, these examples are intended to demonstrate the principles and characteristics of ETL Instrumentation. They are not complete and Production-ready. I make no claims that this is "the right way" or even a best practice to capture ETL Run Time Metrics data. I do maintain that such data is useful in many ways - especially for troubleshooting and certain performance predictive analytics.&lt;/P&gt;
&lt;P&gt;Next: Validation - putting this data to work.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description></item><item><title>SSIS Design Pattern - ETL Instrumentation, Part 3</title><link>http://sqlblog.com/blogs/andy_leonard/archive/2007/11/18/ssis-design-pattern-etl-instrumentation-part-3.aspx</link><pubDate>Mon, 19 Nov 2007 03:45:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:3402</guid><dc:creator>andyleonard</dc:creator><description>&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;This post is part of a series of posts on ETL Instrumentation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In &lt;/FONT&gt;&lt;A class="" title="SSIS Design Pattern - ETL Instrumentation, Part 1" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/08/03/ssis-design-pattern-etl-instrumentation-part-1.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff&gt;Part 1&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana color=#000080&gt; we built a database to hold collected SSIS run time metrics and an SSIS package to deomnstrate how and why we would load metrics into the database.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In &lt;/FONT&gt;&lt;A class="" title="SSIS Design Pattern - ETL Instrumentation, Part 2" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/11/ssis-design-pattern-etl-instrumentation-part-2.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff&gt;Part 2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana color=#000080&gt; we expanded on our database and the SSIS package to annotate version metadata, manage error metrics capture, and task status reporting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;In Part 3, we start using the ETL Instrumentation infrastructure we've built to measure some actual ETL. We now have the concepts - it's time to put them to work!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#000080&gt;A Brief History Of Our ETL Instrumentation Project&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;To review, our existing database is named SSISRunTimeMetrics. It contains a schema named ssis. In this schema are&amp;nbsp;eight objects:&lt;BR&gt;&amp;nbsp;- a table named ssis.RunTimeMetrics.&lt;BR&gt;&amp;nbsp;- a table named ssis.RunTimeErrors.&lt;BR&gt;&amp;nbsp;- a table named ssis.TaskMetrics.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageStart.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageEnd.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageError.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordTaskStart.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordTaskEnd.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;We&amp;nbsp;expanded&amp;nbsp;the types of run-time data we are collecting.&amp;nbsp;Part 1 introduced Status collection, in Part 2 we added Exception collection. We also introduced scope into both types of collection, recording Exception information on error &lt;EM&gt;and&lt;/EM&gt; finalizing Status (reporting that an error occurred).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;At the beginning of SSIS package execution, we call ssis.usp_RecordPackageStart from an Execute SQL Task. We pass the package start date and time, the package name, and the package version. We also pass in a status of "Started". From this stored procedure we get the ID of the newly created row, which we then push into a Package Load ID variable (iPackageLoadID).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;At the beginning of a task or collection of tasks that define a process, we call ssis.usp_RecordTaskStart from an Execute SQL Task. We pass the&amp;nbsp;task or process&amp;nbsp;start date and time, the&amp;nbsp;task (source)&amp;nbsp;name, iPackageLoadID, and a status of "Started". From this stored procedure we get the ID of the newly created row, which we then push into a&amp;nbsp;Task Load ID variable (iTaskLoadID).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;When the&amp;nbsp;task completes, we call ssis.usp_RecordTaskEnd from an Execute SQL Task. We pass in the&amp;nbsp;Task Load ID from the iTaskLoadID&amp;nbsp;variable, the current date and time, and the status "Succeeded".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;On error, we capture Exception data and record an Error Status - both are crucial to &lt;EM&gt;knowing&lt;/EM&gt; what happens when an exception is thrown.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;When the package completes execution, we call ssis.usp_RecordPackageEnd from an Execute SQL Task. We pass in the Package Load ID from the variable, the current date and time, and the status "Succeeded".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#000080&gt;Version Metadata&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Let's create a target database for our ETL process. Open SQL Server Management Studio (SSMS) and execute the following script to create SSISRunTimeMetrics_Target:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;
&lt;P&gt;-- create a target database...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;master&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; master&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.databases&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'SSISRunTimeMetrics_Target'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Database&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics_Target&lt;BR&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Open the existing SSISRunTimeMetrics SSIS solution. Open the SSISRunTimeMetrics package and edit the version metadata:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_01.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;This is a major revision - we're moving to version 2.0 and resetting the VersionBuild property. I also add&amp;nbsp;text to the&amp;nbsp;VersionComments property.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Don't forget the package annotation:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG style="WIDTH:280px;HEIGHT:23px;" height=23 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_02.png" width=280&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG style="WIDTH:215px;HEIGHT:216px;" height=216 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_03.png" width=215&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Now we're ready to make some code changes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#000080&gt;Extract, Transform, Load? Two Out Of Three Ain't Bad...&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Rename the "Step 1 - Do&amp;nbsp;some stuff" Sequence Container to "Step 1 - Load Contacts". Double-click the "Log Start of Task" Execute SQL Task to open the editor. Set the SQLStatement property to:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordTaskStart ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,NULL,&lt;/FONT&gt;&lt;FONT size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Started'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Change the name property to "Load Contact":&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_04.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Click the Parameter Mapping page and click the Add button. Set the Variable Name to System::TaskName, change the Data Type to VarChar, and the Parameter Name to 1.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Other applicable&amp;nbsp;properties were modified in Part 2 of this series. Because of the design of the related Task Status collection in Part 2, we&amp;nbsp;do not need to make major changes to the "Log Successful End of Task" or "Log&amp;nbsp;Failed End of Task" Execute SQL Tasks - they are&amp;nbsp;ready for our purposes. Next, delete the Test Script Task. Drag a Data Flow Task into the space vacated by the script task:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG style="WIDTH:257px;HEIGHT:271px;" height=271 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_05.png" width=257&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Double-click the Data Flow Task to open the editor. Drag an OLE DB Source Adapter onto the Data Flow Task canvas and double-click it to open the editor.&amp;nbsp;Click the New button beside the OLE DB connection manager to open the Configure OLE DB Connection Manager dialog. Click the New button to open the Connection Manager dialog. Enter "(local)" in the Server name dropdown box. In the "Select or enter a database name" dropdown, select AdventureWorks. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_06.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Verdana color=#000080&gt;You can download &lt;/FONT&gt;&lt;/EM&gt;&lt;A class="" title="SQL Server 2005 Samples and Sample Databases" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E719ECF7-9F46-4312-AF89-6AD8702E4E6E&amp;amp;displaylang=en" target=_blank&gt;&lt;EM&gt;&lt;FONT face=Verdana color=#000080&gt;SQL Server 2005 Samples and Sample Databases&lt;/FONT&gt;&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&lt;FONT face=Verdana color=#000080&gt; if you don't already have them installed.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Click the OK button to close the Connection Manager dialog. Click the OK button again to close the Configure OLE DB Connection Manager dialog. Select "Person.Contact" from the "Name of the table or the view" dropdown and click the OK button to close the OLE DB Source Editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Drag an OLE DB Destination Adapter onto the Data Flow canvas and connect it to the OLE DB Source Adapter. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_07.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Double-click the OLE DB Destination Adapter to open the editor. Using the procedure outlined above, create a connection to the SSISRunTimeMetrics_Target database you created earlier:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_08.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&amp;nbsp;Click the New button beside the "Name of the table or the view" dropdown. Change the table name in the Create Table statement from "[OLE DB Destination]" to "[dbo].[Contact]". Your script should now read:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; [dbo]&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;[Contact] &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[ContactID] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INTEGER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[NameStyle] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BIT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[Title] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;8&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[FirstName] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[MiddleName] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[LastName] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[Suffix] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;10&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[EmailAddress] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[EmailPromotion] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INTEGER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[Phone] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[PasswordHash] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;40&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[PasswordSalt] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;10&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[AdditionalContactInfo] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NTEXT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[rowguid] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;UNIQUEIDENTIFIER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[ModifiedDate] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DATETIME&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Click the OK button. Click the Mappings page and then the Ok button to close the editor. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Now we have a process that extracts data from the AdventureWorks database and loads it into our SSISRunTimeMetrics_Target database. Execute the package and observe the Data Flow:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_09.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Let's modify&amp;nbsp;the report query from &lt;A class="" title="SSIS Design Pattern - ETL Instrumentation, Part 2" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/11/ssis-design-pattern-etl-instrumentation-part-2.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff&gt;Part 2&lt;/FONT&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080&gt;:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDescription&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RunTimeMetrics m&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetrics t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;left&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;outer&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeErrors e &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=3&gt;The left outer join to the RunTimeErrors table allows us to view successful executions. Chnaging the Where clause to bring back the latest id value from the RunTimeMetrics table will prove useful when we add tasks.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#000080&gt;Count Me In&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;On the Data Flow Task, delete the data flow path between the OLE DB Source Adapter and OLE DB Destination Adapter. Drag a Row Count Tranformation from the Toolbox onto the Data Flow canvas and connect it between the OLE DB Source and OLE DB Destination Adapters.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_10.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Click&amp;nbsp;SSIS, Variables&amp;nbsp;and create a new package-scoped Int32 variable named iContactCount.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_11.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Double-click the Row Count transformation to open the editor. Click the VariableName dropdown and select the User::iContactCount variable to hold the record counts. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000080&gt;Now we have a variable to count the number of rows loaded by the data flow - we now need a place to store this data. Let's create a table to hold the row counts. Use the following script to create the ssis.RowCounts table:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create RunTimeErrors table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowCounts'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCounts&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;[RowCount] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana color=#000080&gt;As always, let's create a stored procedure to handle the insert:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordRowCount'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowCount&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowCount&lt;BR&gt;&amp;nbsp; @RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCount &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- insert the run time errors data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCounts&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;[RowCount]&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCount&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT face=Verdana color=#000080&gt;There are different ways (methodologies) to&amp;nbsp;instrument an ETL SSIS package. Some designers choose to place the code to insert row counts - as well as the code to store start and end metrics we capture in the ssis.TaskMetrics table -&amp;nbsp;on the Control Flow. Other&amp;nbsp;choose to use Event Handlers - OnPreExecute and OnPostExecute - to&amp;nbsp;house the logic performing these operations.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;There are sound reasons for choosing each method. An argument for using Event Handlers is it provides a separation of the ETL logic and metrics / status logic. An argument for not using Event Handlers is all the logic is readily accessible on the Control Flow&amp;nbsp;and Data Flow. Both arguments are legitimate and the customer's maintenance needs and SSIS experience should be considered in this design decision.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;For the purposes of this series, I choose to have most of the logic visible on the Control Flow and Data Flow.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Return to the Control Flow to&amp;nbsp;add a mechanism to insert the RowCount data into our new table. Drag an Execute SQL Task into the "Step 1 - Load Contact" Sequence Container. Connect a Success Precendence Constraint from the "Log Successful End of Task" Execute SQL Task to the new Execute SQL Task. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_12.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Double-click the new Execute SQL Task to open the editor. Configure the General and Parameter Mappings pages as shown:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_13.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_14.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Click the OK button to close the Execute SQL Task editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Before we test the new row count functionality, let's clear the destination table. Execute the following SQL statement in SSMS:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Truncate&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics_Target&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080&gt;Now execute the package.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;A slight modification of our earlier report query adds the record counts:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" color=#000080&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;,c.[RowCount]&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;ErrorDescription&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RunTimeMetrics m&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetrics t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#808080&gt;left&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;outer&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeErrors e &lt;/FONT&gt;&lt;FONT size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; e&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#808080&gt;left&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;outer&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowCounts&amp;nbsp;c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;The results appear as shown:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_15.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;We get all the rows this execution - cool.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;This demostration is &lt;EM&gt;nearly&lt;/EM&gt; true-to-life. Let's take it closer by adding incremental loading. (I cover another &lt;A class="" title="SSIS Design Pattern - Incremental Load" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/07/09/ssis-design-pattern-incremental-loads.aspx" target=_blank&gt;SSIS Design Pattern - Incremental Loads&lt;/A&gt; - in another post.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;First return to the Control Flow. Click anywhere in the Control Flow canvas where there is white space. This sets focus to the Control Flow, which sets focus to the Package level. Click SSIS, Variables to display the Variables dialog. Add three package-scoped Int32 variables named iNewRowsCount, iChangedRowsCount, and iUnchangedRowsCount.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the Data Flow tab and drag an OLE DB Command, Lookup, and Conditional Split transformations onto the Data Flow Task. Also drag three Row Count transformations onto the Data Flow. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Rename the OLE DB Destination Adapter "Insert New Rows" and delete the data flow path (the green line / arrow) that connects it to the Row Count transformation. Connect the Lookup to the output of the Row Count to the input of the Lookup and double-click the Lookup to open the editor. Set the OLE DB connection manager property to "(local).SSISRunTimeMetrics_Target" and the "Use a table or view" dropdown to "[dbo].[Contact]":&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_16.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the Columns tab. Right-click in the mappings area and click "Select All Mappings". Right-click in the mappings area again and click "Delete Selected Mappings". Drag ContactID from the Available Input Columns and drop it on the Available Lookup Columns' ContactID column.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Select all the columns in the Available Lookup Columns list except the AdditionalContactInfo and rowguid columns. In the Output Alias column, add a "Dest_" prefix to each field. This will allow easier identification in the pipeline:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_17.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the Configure Error Output button and change the Lookup Output Error dropdown from "Fail component" to "Ignore failure". This changes the default behavior of the Loopup operation from an Inner Join to a Left Outer Join.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:423px;HEIGHT:221px;" height=221 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_18.png" width=423&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the OK button to close the Lookup editor. Connect the output of the Lookup transformation to the input of the Conditional Split transformation and double-click the Conditional Split to open the editor. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Name the first Output "New Rows" and set the Condition to "IsNull(Dest_ContactID)".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Name the second Output "Changed Rows" and set the Condition to "(IsNull(Dest_NameStyle) ? True : Dest_NameStyle) != (IsNull(NameStyle) ? True : NameStyle) || (IsNull(Dest_Title) ? "null" : Dest_Title) != (IsNull(Title) ? "null" : Title) || (IsNull(Dest_FirstName) ? "null" : Dest_FirstName) != (IsNull(FirstName) ? "null" : FirstName) || (IsNull(Dest_MiddleName) ? "null" : Dest_MiddleName) != (IsNull(MiddleName) ? "null" : MiddleName) || (IsNull(Dest_LastName) ? "null" : Dest_LastName) != (IsNull(LastName) ? "null" : LastName) || (IsNull(Dest_Suffix) ? "null" : Dest_Suffix) != (IsNull(Suffix) ? "null" : Suffix) || (IsNull(Dest_EmailAddress) ? "null" : Dest_EmailAddress) != (IsNull(EmailAddress) ? "null" : EmailAddress) || (IsNull(Dest_EmailPromotion) ? -1 : Dest_EmailPromotion) != (IsNull(EmailPromotion) ? -1 : EmailPromotion) || (IsNull(Dest_Phone) ? "null" : Dest_Phone) != (IsNull(Phone) ? "null" : Phone) || (IsNull(Dest_PasswordHash) ? "null" : Dest_PasswordHash) != (IsNull(PasswordHash) ? "null" : PasswordHash) || (IsNull(Dest_PasswordSalt) ? "null" : Dest_PasswordSalt) != (IsNull(PasswordSalt) ? "null" : PasswordSalt) || (IsNull(Dest_ModifiedDate) ? (DT_DBDATE)"1/1/1901" : Dest_ModifiedDate) != (IsNull(ModifiedDate) ? (DT_DBDATE)"1/1/1901" : ModifiedDate)".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Change the Default Output Name to "Unchanged Rows".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_19.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Drag an output from the Conditional Split to one of the Row Count transformations. When prompted, select the New Rows output from the Conditional Split transformation. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:560px;HEIGHT:301px;" height=301 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_20.png" width=560&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Rename this Row Count "New Rows Count" and double-click it to open the editor. Set the VariableName property to User::iNewRowsCount and click the OK button to close the editor. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Connect the output of the New Rows Count transformation to the OLE DB Destination Adapter "Insert New Rows".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:223px;HEIGHT:519px;" height=519 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_21.png" width=223&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Drag a second output from the Conditional Split to another Row Count transformation. When prompted, select the Changed Rows output.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:560px;HEIGHT:301px;" height=301 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_22.png" width=560&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Rename the Row Count transformation "Changed Rows Count" and double-click the Row Count transformation to open the editor. Set the VariableName property to iChangedRowsCount and click the OK button to close the editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:623px;HEIGHT:285px;" height=285 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_23.png" width=623&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Double-click the OLE DB Command transformation to open the advanced editor. Set the Connection Manager property to "(local).SSISRunTimeMetrics_Target". &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the Component Properties tab. Click the SQLCommand ellipsis and enter the following statement in the String Value Editor:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;update&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Contacts &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;FONT size=2&gt; NameStyle &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;Title &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;FirstName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;MiddleName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;LastName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;Suffix &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;EmailAddress &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;EmailPromotion &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;Phone &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordHash &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordSalt &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ModifiedDate &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; ContactID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;IMG style="WIDTH:363px;HEIGHT:328px;" height=328 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_24.png" width=363&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Connect the remaining Conditional Split output (Unchanged Rows) to the remaining Row Count transformation. Rename the Row Count "Unchanged Rows Count", double-click it to open the editor, and set the VariableName to User::iUnchangedRowCount.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_25.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;&lt;A class="" title=SetBasedUpdates name=SetBasedUpdates&gt;&lt;/A&gt;Some Optimization...&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Before we leave the Data Flow, let's optimize&amp;nbsp;it for performance. There's a couple good reasons for this,&amp;nbsp;one big&amp;nbsp;reason is the current design may very well result in blocking, maybe even deadlocks! &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Delete the "Update Changed Rows" OLE DB Command. Drag an OLE DB Destination Adapter onto the Data Flow Task and connect it to the Changed Rows Count transformation. Change the name of the Adapter to "stgContactChangedRows" and double-click it to open the editor. Set the OLE DB connection manager to "(local).SSISRUnTimeMetrics_Target". Change the Data Access Mode to "Table or view". Click the New button beside the "Name of table or view" dropdown:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_28.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the OK button to create the new table, then click the Mappings page to complete configuration. Click the OK buton to close the editor. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;On the Control Flow, add an Execute SQL Task just after the Data Flow Task. Name it "Apply Staged Updates" and set the Connection property to "(local).SSISRunTimeMetrics_Target". Set the SQLStatement property to the follow SQL:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;UPDATE&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ContactID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ContactID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;NameStyle &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;NameStyle&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Title &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Title&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;FirstName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;FirstName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;MiddleName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;MiddleName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;LastName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;LastName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Suffix &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Suffix&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;EmailAddress &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;EmailPromotion &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;EmailPromotion&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Phone &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Phone&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordHash &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordHash&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordSalt &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;PasswordSalt&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;AdditionalContactInfo &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;AdditionalContactInfo&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;rowguid &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;rowguid&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ModifiedDate &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ModifiedDate&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Contact c&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;INNER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;stgContactChangedRows u &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; u&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ContactID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ContactID&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;This&amp;nbsp;converts the RBAR (Row-By-Agonizing-Row) update statement in the OLE DB Command to a set-based update. Much better.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;We need to capture these row counts, but we need a way to mark them as well. Let's return to our ssis.RowCounts table design and modify it. Before modifying the table, let's create and populate&amp;nbsp;a lookup table&amp;nbsp;for RowCountTypes:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create RunTimeErrors table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowCountTypes'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&amp;nbsp;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000080&gt;Execute the following statement to add the lookup column&amp;nbsp;to the ssis.RowCounts table:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.columns&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;object_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;object_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowCounts'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RowCountTypeID'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Alter&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCounts &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Add&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char(1)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Execute the following statements to populate the RowCountTypes table:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Selected Input Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Input rows selected from a source'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'New Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'New rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Changed Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Changed rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowCountTypes&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Unchanged Rows'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No changes detected in rows'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;We now need to updated our stored procedure that inserts records into ssis.RowCounts:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordRowCount'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowCount&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordRowCount&lt;BR&gt;&amp;nbsp;@RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCount &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCountType &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- insert the run time errors data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCounts&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;[RowCount]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;RowCountTypeID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCount&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@RowCountType&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Finally, let's update the "Record Row Count"&amp;nbsp;SQLStatement.While we're in there,&amp;nbsp;let's add the inserts for the additional row count variables. Return to the Control Flow and double-click the "Record Row Count" Execute SQL Task to open the editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Change the SQLStatement to:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#000080&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowCount ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'I'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowCount ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'N'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowCount ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'C'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordRowCount ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Click the Parameter Mappings page and edit as shown:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_26.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Note every third parameter is a count measurement, the order indicated by the SQLStatement property. &lt;/FONT&gt;&lt;FONT color=#000080&gt;Click the OK button to close the editor and execute the package.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Let's modify our report query yet again to have a look at the collected metrics:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;select&lt;BR&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;,c.[RowCount]&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;,ct.RowCountTypeName&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;ErrorDescription&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RunTimeMetrics m&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetrics t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#808080&gt;left&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;outer&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeErrors e &lt;/FONT&gt;&lt;FONT size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; e&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#808080&gt;left&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;outer&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RowCounts&amp;nbsp;c &lt;/FONT&gt;&lt;FONT size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; c&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;left&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;outer&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowCountTypes&amp;nbsp;ct &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ct&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RowCountTypeID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RowCountTypeID &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;The results?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_27.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;The Data It Is A-Changin'&lt;/STRONG&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Let's simulate live data changes by making some changes in the source data. Execute the following statements to delete and modify data in SSISRunTimeMetrics_Target:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics_Target&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;delete&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;Contact&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ContactID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;%&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 17 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; 0&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;update&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;Contact&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; MiddleName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;IsNull&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;MiddleName&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;''&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'A'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ContactID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;%&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 25 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; 0&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Execute the package again and observe the Data Flow. Now this is starting to look like SSIS ETL!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_29.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Let's have a look at our metrics to see if the numbers match:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_3_30.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;I'd say that settles it. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;We are now capturing enough information to gain good insight into our ETL process - how cool is that? More next time...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;A class="" title="Get the code from VSTeamSystemCentral (Free registration required)!" href="http://www.vsteamsystemcentral.com/dnn/Demos/SSISRunTimeMetrics/tabid/111/Default.aspx" target=_blank&gt;Get the code&lt;/A&gt;!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;:{&amp;gt; Andy&lt;/FONT&gt;&lt;/P&gt;</description></item><item><title>SSIS Design Pattern - ETL Instrumentation, Part 2</title><link>http://sqlblog.com/blogs/andy_leonard/archive/2007/11/11/ssis-design-pattern-etl-instrumentation-part-2.aspx</link><pubDate>Sun, 11 Nov 2007 06:18:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:3280</guid><dc:creator>andyleonard</dc:creator><description>&lt;BR&gt;
&lt;DIV class=post&gt;
&lt;DIV class=postsub&gt;&lt;FONT face=verdana color=navy&gt;
&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post is part of a series of posts on ETL Instrumentation.&lt;/P&gt;
&lt;P&gt;In &lt;A class="" title="SSIS Design Pattern - ETL Instrumentation, Part 1" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/08/03/ssis-design-pattern-etl-instrumentation-part-1.aspx" target=_blank&gt;Part 1&lt;/A&gt; we built a database to hold collected SSIS run time metrics and an SSIS package to deomnstrate how and why we would load metrics into the database.&lt;/P&gt;
&lt;P&gt;In Part 2 we will expand on our database and the SSIS package to annotate version metadata, manage error metrics capture, and task status reporting.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Brief History Of Our ETL Instrumentation Project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To review, our existing database is named SSISRunTimeMetrics. It contains a schema named ssis. In this schema are three objects:&lt;BR&gt;&amp;nbsp;- a table named ssis.RunTimeMetrics.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageStart.&lt;BR&gt;&amp;nbsp;- a stored procedure named ssis.usp_RecordPackageEnd.&lt;/P&gt;
&lt;P&gt;At the beginning of SSIS package execution, we call ssis.usp_RecordPackageStart from an Execute SQL Task. We pass the package start date and time, the package name, and the package version. We also pass in a status of "Started". From this stored procedure we get the ID of the newly created row, which we then push into a Package Load ID variable (iPackageLoadID).&lt;/P&gt;
&lt;P&gt;When the package completes execution, we call ssis.usp_RecordPackageEnd from an Execute SQL Task. We pass in the Package Load ID from the variable, the current date and time, and the status "Succeeded".&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;First Things First&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Let's&amp;nbsp;start by opening the&amp;nbsp;SSIS package we built in Part 1.&amp;nbsp;The first thing we want to change is the package metadata - the data &lt;EM&gt;in&lt;/EM&gt; our SSIS package &lt;EM&gt;about&lt;/EM&gt; our SSIS package. Why? We always want to know what changes were made, who made the changes, and when they were made.&lt;/P&gt;
&lt;P&gt;Let's begin by updating the version. Click on the Control Flow tab and press the F4 key to open properties. Scroll to the Version Properties and change the VersionMinor from 0 to 1:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_05.png"&gt;&lt;/P&gt;
&lt;P&gt;Also&amp;nbsp;edit the Control Flow annotation that contains version information:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_03.png"&gt;&lt;/P&gt;
&lt;P&gt;Update package description annotation. I like to include a Change Log summary inside each package:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:216px;HEIGHT:171px;" height=171 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_04.png" width=216&gt;&lt;/P&gt;
&lt;P&gt;In the Change Log, I include&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;A version number in the format Major.Minor.Date. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The date of the change.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The name of the developer who made the change.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;A brief description of the change.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Now I'm ready to actually make changes! To facilitate package execution on your machine, I want to edit the name and target SQL Server instance of the OLEDB Connection Manager. Double-click the connection manager to edit it and change the Server name property to "(local)". &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_01.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the connection manager editor. For consistency, right-click the connection manager and click Rename. Change the name to "(local).SSISRunTimeMetrics":&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:178px;HEIGHT:50px;" height=50 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_02.png" width=178&gt;&lt;/P&gt;
&lt;P&gt;There. Housekeeping accomplished!&lt;/P&gt;
&lt;P&gt;A test run verifies I haven't broken anything:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_06.png"&gt;&lt;/P&gt;
&lt;P&gt;Unit test successful&amp;nbsp;- ready to continue developing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Errors Aside&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Our current solution works well as long as our SSIS package succeeds. And this is the way all good engineering is done; Use Case 1 should always be "Everything Succeeds". But what happens if the SSIS package fails? Shouldn't we record the failure and as much metadata about the failure as possible? I'm glad you asked: Yes, we should.&lt;/P&gt;
&lt;P&gt;In SSIS, errors "bubble". The concept of bubbling is familiar to ASP developers - it simply means events follow a prescribed path through the scope hierarchy of the application. Ok, you can scratch the word "simply" out of the preceeding sentence. &lt;/P&gt;
&lt;P&gt;Let's use the script task to generate an error. Right the Test Script Task and click Edit to open the editor. Click the Script page and the Design Script button to open the Visual Studio for Applications (VSA) script editor. I use Script Tasks for exception testing. The following code&amp;nbsp; - replacing the "&lt;FONT face="courier new"&gt;Dts.TaskResult = Dts.Results.Success&lt;/FONT&gt;" line - will prompt you to have the task succeed or fail:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; iResponse &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;iResponse = MsgBox(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Have task complete with Success?"&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.YesNo)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; iResponse = vbYes &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Failure&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;The additional code causes a second messagebox:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_07.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you click Yes in response, the task will succeed. Clicking No will cause the task to fail:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:269px;HEIGHT:123px;" height=123 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_08.png" width=269&gt;&lt;/P&gt;
&lt;P&gt;SSIS has some great logging and error-handling functionality built in. The first place to look when an error occurs is the Progress / Execution Results tab in the SSIS Designer GUI. The tab is named Progress while the package is executing and becomes Execution Results once execution completes. Click the Progress / Execution Results tab to view the error raised when you clicked the No button:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_09.png"&gt;&lt;/P&gt;
&lt;P&gt;This isn't a very descriptive error message. Some SSIS error messages aren't very descriptive. Let's add some error logging capabilities to our ETL Instrumentation application.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To Err is Human...&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There are lots of ways to develop&amp;nbsp;solutions with SSIS. Some of them are best practices, more are simply matters of coding style. For instance, here you could build the database table to hold error information first; or you could build the error-handling functionality in the SSIS package first. This is a style decision. I choose to build the&amp;nbsp;table first.&lt;/P&gt;
&lt;P&gt;My initial errors table will be named RunTimeErrors and will&amp;nbsp;contain the following fields:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;RunTimeMetricsID - to map the error to the execution instance. I want to know the error occurred when I executed the package at a certain time.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;ErrorDateTime - when the error actually occurred.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;SourceName - the task that raised the error.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;ErrorNumber - the error number.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;ErrorDescription - the&amp;nbsp;error description.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I generate the table with the following T-SQL script:&lt;/P&gt;&lt;FONT face="courier new"&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create RunTimeErrors table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RunTimeErrors'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeErrors&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorNumber &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2500&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Note this script is re-runnable. I encourage you to take the time to write re-runnable scripts when developing database solutions.&lt;/P&gt;
&lt;P&gt;We could stop here and directly insert rows into our error table, but let's complete the development process by creating a stored procedure to do this work for us. Execute the following code in SSMS:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordPackageError'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageError&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageError&lt;BR&gt;&amp;nbsp; @RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@SourceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ErrorNumber &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ErrorDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2500&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;-- set @Now...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; -- insert the run time errors data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeErrors&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;/FONT&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;FONT size=2&gt;@RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@Now&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@ErrorDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Again, re-runnable code. Now lets' return to Visual Studio to populate our table with error information.&lt;/P&gt;
&lt;P&gt;Click on the Test Script Task on the Control Flow. Then click the Event Handlers tab. Because you clicked the Test Script Task first, the Event Handler Executable defaults to the&amp;nbsp;Test Script Task. The Event Handler defaults to the OnError event. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_10.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To create the OnError Event Handler, click the link labeled "Click here to create an 'OnError' event handler for executable 'Test Script Task'". Let's do that now.&lt;/P&gt;
&lt;P&gt;After you click the link you will note the canvas looks remarkably familiar: it's nearly identical to the Control Flow. &lt;/P&gt;
&lt;P&gt;Our goal is&amp;nbsp;to load data into&amp;nbsp;our RunTimeErrors table. Let's use an Execute SQL Task to call the stored procedure. Drag an Execute SQL Task onto the OnError Event Handler canvas and double-click it to open the editor. Name the Execute SQL Task "Record Error". Set the connection to "(local).SSISRunTimeMetrics". Set the SQLStatement property to "exec ssis.usp_RecordPackageError ?,?,?,?":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_11.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Parameter Mapping page. Parameterized queries use question marks (?) as parameter placeholders. There are a few ways to access the parameters (a subject for another blog post). We will use ordinal position to access them. Click the Add button to add a new parameter. Set the Variable Name property to "User::iPackageLoadID" and the Parameter Name property to "0". The default data type ("Long") works for SSIS integer data type variables. This maps the iPackageLoadID variable to the first question mark in our SQLStatement property, which is the @RunTimeMetricsID parameter for the stroed procedure. Got it? Good.&lt;/P&gt;
&lt;P&gt;Add three more parameters:&lt;/P&gt;
&lt;P&gt;Variable Name: System::SourceName&lt;BR&gt;Data Type: VarChar&lt;BR&gt;Parameter Name: 1&lt;/P&gt;
&lt;P&gt;Variable Name: System::ErrorCode&lt;BR&gt;Data Type: Long&lt;BR&gt;Parameter Name: 2&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080&gt;
&lt;P&gt;Variable Name: System::ErrorDescription&lt;BR&gt;Data Type: VarChar&lt;BR&gt;Parameter Name: 3&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_12.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor and execute the package.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button on the first messagebox, then click the No button on the messagebox dialog to fail the Test Script Task. When the task fails, the OnError event fires and calls our stored procedure:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_13.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's look at the table to see what was recorded. Return to SSMS and execute the following query:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;*&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeErrors &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;order&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;by&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ErrorDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;desc&lt;/FONT&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;The results:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_14.png"&gt;&lt;/P&gt;
&lt;P&gt;We now have basic error information from our failed task. This is great for our Test Script Task, but what about the other tasks on our SSIS package? Do we have to create OnError event handlers for them as well? That could be a lot of work.&lt;/P&gt;
&lt;P&gt;Remember that &lt;EM&gt;bubbling&lt;/EM&gt; thing we mentioned at the beginning of this post? We can employ the fact that errors bubble up through the object model. When an&amp;nbsp;error occurs in the Test Script Task, an error bubbles up to the Sequence Container named "Step 1 - Do some stuff". You can see it in this earlier screenshot:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_08.png"&gt;&lt;/P&gt;
&lt;P&gt;To demonstrate, let's add error handling to the Sequence Container. First, stop debugging the SSIS package if you have not already done so. Then right-click the "Record Error" Execute SQL Task and click Copy to copy it to the clipboard.&amp;nbsp;Click the Executable dropdown and select the "Step 1 - Do some stuff" Sequence Container:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_15.png"&gt;&lt;/P&gt;
&lt;P&gt;Select the OnError event handler and click the link to create the OnError event handler. Then paste the "Record Error" Execute SQL Task onto the new OnError event handler canvas. Re-execute the package&amp;nbsp;observing the new OnError event handler.&amp;nbsp;Click the No button to cause the Test Script Task to fail. &lt;/P&gt;
&lt;P&gt;Note the new OnError event handler fires, in addition to the Test Script Task OnError event handler:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_16.png"&gt;&lt;/P&gt;
&lt;P&gt;Re-execute the query in SSMS to verify:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_17.png"&gt;&lt;/P&gt;
&lt;P&gt;Note the subsequent execution (RunTimeMetricsID 10, in my case) records the error twice. Hmmm... this is not the desired behavior. I only want the error to show up once per instance. However, also note the information recorded is nearly identical - only the date is different (and then only by 183 milliseconds). So the 20:17:58.803 occurrence of the error is from the Test Script Task and the 20:17:58.990 occurrence is the same error bubbling into the "Step 1 - Do some stuff" Sequence Container's context and firing an identicaly-configured OnError event handler.&lt;/P&gt;
&lt;P&gt;Again, this is not the desired behavior but it gives me an idea: Since I know errors bubble up the object model, &lt;EM&gt;all&lt;/EM&gt; errors should eventually make it to the Package level. If I delete my existing OnError event handlers and create a &lt;EM&gt;single&lt;/EM&gt; OnError event handler at the package level, I should then be able to&amp;nbsp;record any and all errors - no matter where they occur in the SSIS package.&lt;/P&gt;
&lt;P&gt;Let's do that. First, copy the "Record Error" Execute SQL Task to the clipboard. Click the Delete button to delete the Sequence Container's OnError event handler, then navigate to the Test Script Task's OnError event handler and click the Delete button there. Click the Yes button on the confirmation dialog each time:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_18.png"&gt;&lt;/P&gt;
&lt;P&gt;Navigate to the SSISRunTimeMetrics (package) event handlers:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_19.png"&gt;&lt;/P&gt;
&lt;P&gt;Create the event handler by clicking the link and paste the Execute SQL Task onto the canvas. Voila, you now have error handling for then entire package. Here we must also add package status logging. The quickest way to accomplish this is to return to the Control Flow and copy the "Log End of Package Execution" Execute SQL Task to the clipboard.&amp;nbsp;Navigate to the package OnError&amp;nbsp;event handler and paste the Execute SQL Task onto the canvas. Connect it to the "Record Error" script task as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_28.png"&gt;&lt;/P&gt;
&lt;P&gt;Double-click the task to open the editor. Rename the task "Log Failed Package Execution" and change the SQLStatement property to:&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordPackageEnd ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Failed'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Re-execute the package to test, answering No to the dialog and failing the Script Task. Re-execute the query in SSMS to verify a single instance of the error is recorded:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_20.png"&gt;&lt;/P&gt;
&lt;P&gt;Note the SourceName column contains the name of the task where the error originates, even though the error has bubbled through two layers of object model. This also holds for the ErrorNumber and ErrorDescription fields. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Task Status, Anyone?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;It's helpful to be able to track performance at a granular level. When instrumenting an ETL process, I like to record additional (and different)&amp;nbsp;metadata at the Task level. &lt;/P&gt;
&lt;P&gt;Since containers contain tasks and groups can represent linked processes or related tasks, task metrics must include parent-task relationships.&amp;nbsp;Execute&amp;nbsp;the following script to build our first TaskMetrics table:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create RunTimeErrors table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'TaskMetrics'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskEndDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;As before, let's create stored procedures to manage inserting start-of-task information into the TaskMetrics table and updating end-of-task information:&lt;FONT face="courier new"&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordTaskMetrics'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordTaskMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new"&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordTaskStart&lt;BR&gt;&amp;nbsp; @RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskStartDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@SourceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;begin&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;-- set @TaskStartDateTime default...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;if&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskStartDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;is&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskStartDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @Now&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;&amp;nbsp;-- insert the run time errors data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStatus&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;output&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Inserted_Task_ID'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;(&lt;/FONT&gt;&lt;FONT size=2&gt;@RunTimeMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@ParentTaskMetricsID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskStatus&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Now for the end-of-task update:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordTaskEnd'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordTaskEnd&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordTaskEnd&lt;BR&gt;&amp;nbsp;@TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskEndDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- set @TaskEndDateTime default...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@TaskEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Is&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Null)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;set&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @Now&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- update the task metrics data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;update&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Set&lt;/FONT&gt;&lt;FONT size=2&gt; TaskEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskEndDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStatus &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; TaskMetricsid &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @TaskMetricsid&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;STRONG&gt;Instrumenting the Task&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We will use the new procedures to instrument the task. &lt;/P&gt;
&lt;P&gt;We need some variables for these parameters. At a bare minimum, we need a variable to hold the Task Metrics ID returned from the ssis.usp_RecordTaskStart stored procedure. Open variables and create a new package-scoped, Int32 type variable named iTaskLoadID:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_21.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the Sequence Container an configure the General page as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_22.png"&gt;&lt;/P&gt;
&lt;P&gt;Set the SQLStatement property to the follow script:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordTaskStart ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,NULL,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Do some stuff'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Started'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the Parameter Mapping page and add a parameter. Set the Variable Name to User::iPackageLoadID and Parameter Name to 0 - accept the defaults for the remaining parameter properties. Click the Result Set page and add a new result. Set the ResultName to 0 and the Variable Name to User::iTaskLoadID. This will hold the TaskMetricsID value returned from the ssis.usp_RecordTaskStart stored procedure:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:404px;HEIGHT:69px;" height=69 src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_23.png" width=404&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor. Next, let's create a way to update TaskMetrics table after a successful execution.&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the "Step 1 - Do some stuff" Sequence Container and connect it as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_24.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Double-click the Execute SQL Task to edit it. Name it "Log Successful End of Task". Set the SQLStatement to:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordTaskEnd ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Completed'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Add one parameter mapped to User::iTaskLoadID and set to Parameter Name 0. Test the new tasks by executing the SSIS package. When prompted, have the script task succeed. Execute the following query to observe the results:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;*&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetrics &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;order&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;by&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; TaskMetricsID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;desc&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_25.png"&gt;&lt;/P&gt;
&lt;P&gt;Note TaskMetricsID 2 completed while TaskMetricsID 1 started and then stopped.&lt;/P&gt;
&lt;P&gt;We now need to add a way to track and record task error status. Add another Execute SQL Task to the Control Flow canvas and connect&amp;nbsp;a&amp;nbsp;Failed&amp;nbsp;Precedence Constraint&amp;nbsp;from the Sequence Container to the new Execute SQL Task as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_26.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Name the new Execute SQL Task "Log Failed End of Task". Set the SQLStatement to:&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;
&lt;P&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordTaskEnd ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Failed'&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Add one parameter mapped to User::iTaskLoadID and set to Parameter Name 0. Test the new tasks by executing the SSIS package. When prompted, have the script task fail. Execute the query to observe the results:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_27.png"&gt;&lt;/P&gt;
&lt;P&gt;You now have enough information to correlate the three tables. For example, we can view the results of the last&amp;nbsp;execution with the following script:&lt;/P&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'packageRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;SourceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;DateDiff&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ss&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskEndDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'taskRunTime'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;TaskStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorNumber&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ErrorDescription&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RunTimeMetrics m&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeErrors e &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; e&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;TaskMetrics t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;RunTimeMetricsID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; m&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;Max&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;packageStartDateTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Those results appear as shown here:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLInstrumentation_2_29.png"&gt;&lt;/P&gt;
&lt;P&gt;This makes a fine source query for a SQL Server Reporting Services solution!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this second part of ETL Instrumentation, we modified version metadata to indicate we have made changes; added package error logging and error status logging; and added task status logging.&lt;/P&gt;
&lt;DIV&gt;Get the &lt;A class="" title="Get the code! (Free registration required)" href="http://www.vsteamsystemcentral.com/dnn/Demos/SSISRunTimeMetrics/tabid/111/Default.aspx"&gt;code&lt;/A&gt;!&lt;/DIV&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description></item><item><title>SSIS Design Pattern - ETL Instrumentation, Part 1</title><link>http://sqlblog.com/blogs/andy_leonard/archive/2007/08/03/ssis-design-pattern-etl-instrumentation-part-1.aspx</link><pubDate>Fri, 03 Aug 2007 07:36:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:2080</guid><dc:creator>andyleonard</dc:creator><description>&lt;FONT face=Verdana color=#000080&gt;
&lt;DIV&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;SSIS is a fantastic ETL engine.&amp;nbsp;When I&amp;nbsp;build an ETL solution in&amp;nbsp;SSIS, I like to collect runtime metrics. Why? I use the data&amp;nbsp;initially to determine a baseline for performance and&amp;nbsp;to determine, in some cases, if I'm loading within&amp;nbsp;a defined window.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I refer to this process of collecting performance and runtime metrics as &lt;EM&gt;ETL Instrumentation &lt;/EM&gt;and I collect this data for every enterprise ETL solution I design.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;The types of things I want to know are:&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;Did the process start when I wanted it to start?&lt;/LI&gt;
&lt;LI&gt;Did it succeed?&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;If not, is it still running?&lt;/LI&gt;
&lt;LI&gt;Did it fail?&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;How long did it execute?&lt;/LI&gt;
&lt;LI&gt;How does recent performance compare to past performance?&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In this mini-series entitled SSIS Design Pattern - ETL Instrumentation, I will demonstrate how I capture, report, and measure these data using SSIS, SSRS, SQL Agent Jobs, and Transact-SQL. &lt;/P&gt;
&lt;P&gt;In Part 1, we build an elementary system. In subsequent parts, we will improve upon the concepts demonstrated here.&lt;/P&gt;
&lt;DIV&gt;&lt;STRONG&gt;To Instrument Or Not To Instrument; That Is The Question&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;My thoughts on this are best summed up thus: &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;There are two types of enterprise data warehouse developers:&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;1) Those who collect ETL instrumentation data; and&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;2) Those who will.&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Why do I make this statement? When you build ETL to load your enterprise data warehouse, you are building the source for the reporting system. Should anything unfortunate happen to the data between the time you read it from the System Of Record and the time it lands in your Reporting Server Database, you are basically guilty until proven innocent. ETL Instrumentation will provide evidence for (and sometimes against) you as you defend your ETL design and implementation.&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;STRONG&gt;Building The&amp;nbsp;Database&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;Before we instrument an ETL process, we need a database solution for the data. We'll start by building the database itself, then add objects.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Let's build the database. We'll call it SSISRunTimeMetrics. Open SQL Server Management Studio (SSMS) and execute the following Transact-SQL:&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size=+2&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;master&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; master&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.databases&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'SSISRunTimeMetrics'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Database&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;/P&gt;&lt;/FONT&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV&gt;&amp;nbsp;&amp;nbsp; This script creates the SSISRunTimeMetrics database. Next, let's create a schema and&amp;nbsp;table to hold our metrics:&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size=+2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size=+1&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; SSISRunTimeMetrics&lt;BR&gt;go&lt;/DIV&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- vars...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create ssis schema...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @sql &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Create Schema ssis'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@sql&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;end&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create RunTimeMetrics table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'RunTimeMetrics'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Table&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;FONT size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageEndDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageVersion &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV&gt;Next, let's add a stored procedure to record a package start event:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordPackageStart'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageStart&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageStart&lt;BR&gt;&amp;nbsp; @packageStartDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;255&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageVersion &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; -- set @packageStartDateTime default...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@packageStartDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Is&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Null)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @packageStartDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @Now&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; -- insert the run time metrics data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; insert&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; (&lt;/FONT&gt;&lt;FONT size=2&gt;packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageVersion&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageStatus&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;FONT size=2&gt;@packageStartDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageVersion&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageStatus&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;That's all for now. We'll add more stuff later.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;STRONG&gt;Building The SSIS Project&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Open SQL Server Business Intelligence Development Studio (BIDS) and create a new project. When the New Project dialog displays, select&amp;nbsp;Business Intelligence Projects from the Project&amp;nbsp;types list and Integration Services Project from the Templates. Name the project SSISRunTimeMetrics and click the OK button:&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_01.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Rename the Package SSISRunTimeMetrics.dtsx:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_02.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Always click the Yes button when you see this dialog (trust me):&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_03.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Right-click in the white-space on the Control Flow canvas&amp;nbsp;and click&amp;nbsp;Add Annotation to document your code:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_04.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;I can't say enough about good documentation. You never know when someone else will have to open your source code to troubleshoot.&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Right-click in the white-space of the Control Flow canvas and click Variables. Add a variable named sVersion. Make sure the Scope is the SSISRunTimeMetrics package and make the Data Type String:&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_11.png"&gt;&lt;/DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Add a Sequence Container and change the name to "Step 1 - Do some stuff":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_05.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;Sequence Containers are nice for several reasons:&lt;/EM&gt;&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;They're aesthetic. You can break up chucks of functionality logically... how cool!&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;When troubleshooting, you can execute the contents of a container from the right-click context menu.&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;You can isolate chunks of functionality using transactions by container.&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV&gt;Next, add an Execute SQL Task and name it "Log Start of Package Execution":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_06.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Double-click the Execute SQL Task to edit it. Click Connection and select "&amp;lt;New connection...&amp;gt;":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_07.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;When the Configure OLE DB Connection Manager dialog displays, click the "New..." button:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_08.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Enter or select your server in the Server Name dropdown. In the "Connect to a database" panel, select the "Select or enter a database name" option and enter or select the SSISRunTimeMetrics database you created earlier. Click the OK button to proceed:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_09.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Then click the OK button again to set the Connection property of the Execute SQL Task:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_10.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Select the SQL Statement property and click the ellipsis. When the "Enter SQL Query" dialog displays, enter the following parameterized Transact-SQL statement:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=blue&gt;Exec&lt;/FONT&gt; ssis.usp_RecordPackageStart ?,?,?,&lt;FONT color=red&gt;'Started'&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the OK button to proceed:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_15.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click on the Parameter Mapping page and configure parameters as shown:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_38.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the OK button to proceed.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Next, let's do some work on the sVersion variable. Click on the sVersion variable name and press the F4 key to display variable properties. Change the EvaluateAsExpression property to True, then click on the Expression property's ellipsis:&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_12.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;When the Expression Builder displays, enter the following SSIS Expression Language text to build a version string in the format &lt;EM&gt;Major.Minor.Build&lt;/EM&gt;:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;(DT_WSTR, 3) @VersionMajor + "." +&amp;nbsp; (DT_WSTR, 3)@VersionMinor + "." + (DT_WSTR, 3)@VersionBuild&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_13.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the "Evaluate Expression" button to check the expression. Then click the OK button to close the Expreesion Builder:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_14.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Add a Script Task and configure it to popup a message box displaying the value of sVersion:&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" color=#0000ff&gt;Imports&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System.Data&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System.Math&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; Microsoft.SqlServer.Dts.Runtime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="courier new"&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ScriptMain&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; sVersion &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"sVersion"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sMsg = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Version: "&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sVersion&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox(sMsg)&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;End&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/DIV&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_17.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Execute the package. Then execute the following Transact-SQL query to check the results:&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;*&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;RunTimeMetrics&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_21.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;It's time to add a procedure to log the end of package execution, but we have a problem: How do we identify the row we just added to the ssis.RunTimeMetrics table? Think about it. We just inserted a row, and since that's the only row in the table it's pretty simple to identify. Later, we will have lots of rows in the table in varying states. We need a method to positively identify the row we're working with.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;We could use the last row inserted - apply Max(id) criteria - but what happens as our metrics grows to include multiple packages? One package could start while another was executing and we'd update the wrong row. &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;We require a means to positively identify the row when added to the table. Such a means exists. If we modify the ssis.usp_RecordPackageStart stored procedure we can have it return the value of the inserted ID. The&amp;nbsp;OUTPUT clause gives us access to the inserted and deleted virtual tables. Modify the stored procedure by adding the following OUTPUT clause as shown:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=blue&gt;output&lt;/FONT&gt;&amp;nbsp;inserted.id&amp;nbsp;&lt;FONT color=#0000ff&gt;as &lt;/FONT&gt;&lt;FONT color=red&gt;'Inserted_ID'&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Execute the Transact-SQL to drop and recreate the ssis.usp_RecordPackageStart stored procedure:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_22.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Add another Int32 Type variable named iPackageLoadID:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_24.png"&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Back in Execute SQL Task, change the ResultSet property to "Single row":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_23.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the Result Set page and add a new resultset. Name it 0 (ordinals work well) and assign the results of this query to the iPackageLoadID variable you just created. This will push the results of the OUTPUT clause in the stored procedure (which will include the id of the newly inserted row) into the iPackageLoadID variable. You can then access it later in the package to update the precise row:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_25.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Alter the Script Task by adding iPackageLoadID to the list of ReadOnlyVariables:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_26.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Alter the VB.Net script to read:&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System.Data&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; System.Math&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; Microsoft.SqlServer.Dts.Runtime&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ScriptMain&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; sVersion &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"sVersion"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; sPackageLoadID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"iPackageLoadID"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sMsg = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Version: "&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sversion &amp;amp; vbCrLf&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sMsg = sMsg &amp;amp; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"PackageLoadID: "&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sPackageLoadID&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox(sMsg)&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;End&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/DIV&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_27.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Execute the package to test the new script:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_28.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Next, add a new stored procedure named ssis.usp_RecordPackageEnd&amp;nbsp;to the SSISRunTimeMetrics&amp;nbsp;database using the following Transact-SQL script:&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; SSISRunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;exists(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.procedures&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'usp_RecordPackageEnd'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; s&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'ssis'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Drop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageEnd&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Create&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Procedure&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;usp_RecordPackageEnd&lt;BR&gt;&amp;nbsp; @id &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageEndDateTime &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;FONT size=2&gt;@packageStatus &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;25&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; -- set @packageEndDateTime default...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; declare&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@packageEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Is&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;Null)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; @packageEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @Now&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp; -- update the run time metrics data...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; update&lt;/FONT&gt;&lt;FONT size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RunTimeMetrics&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; Set&lt;/FONT&gt;&lt;FONT size=2&gt; packageEndDateTime &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @packageEndDateTime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;/FONT&gt;&lt;FONT size=2&gt;packageStatus &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @packageStatus&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; where&lt;/FONT&gt;&lt;FONT size=2&gt; id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @id&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;go&lt;/DIV&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Now add a new Execute SQL Task named "Log End of Package Execution":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_29.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Set the Connection property to your SSISRunTimeMetrics database and the SQLStatement property to the following Transact-SQL statement:&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;BR&gt;set&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; @Now &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#0000ff size=2&gt;Exec&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; ssis&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;usp_RecordPackageEnd ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@Now&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Succeeded'&lt;BR&gt;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_31.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the Parameter Mapping page and configure the iPackageLoadID variable as an input variable of the Long data type, assigned to ordinal 0:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_35.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Click the OK button:&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_33.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Execute the package. Note that each time a change is saved, the VersionBuild property auto-increments, thus updating your sVersion variable value:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_34.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;The package succeeds: &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_36.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Examine the data stored in the ssis.RunTimeMetrics table. Note the latest row now contains a Start &lt;EM&gt;and&lt;/EM&gt; End DateTime, and the packageStatus field now records "Succeeded":&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ETLIntrumentation_1_37.png"&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;We will work with these concepts more - fleshing them out&amp;nbsp;by adding more robust code and additional functionality. For now, this is a good start. Congratulations!&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Get the &lt;A class="" title="Get the code! (Free registration required)" href="http://www.vsteamsystemcentral.com/dnn/Demos/SSISRunTimeMetrics/tabid/111/Default.aspx"&gt;code&lt;/A&gt;!&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;:{&amp;gt; Andy&lt;/DIV&gt;&lt;/DIV&gt;&lt;/FONT&gt;</description></item></channel></rss>