<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://vsteamsystemcentral.com/cs21/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>Applied Business Intelligence</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>SSIS Expression Language and Dynamic Property Expressions</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/21/ssis-expression-language-and-dynamic-property-expressions.aspx</link><pubDate>Sat, 21 Feb 2009 13:57:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:380</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/380.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=380</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post is part of a series titled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/29/an-introduction-to-the-ssis-expression-language.aspx"&gt;An Introduction to the SSIS Expression Language&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In this post, I demonstrate the SSIS Expression Language and Dynamic Property Expressions. &lt;/P&gt;
&lt;P&gt;To build the demo project described in this article you will need SSIS 2005 and the AdventureWorks sample database (which can be downloaded at &lt;A href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004&lt;/A&gt;). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Build The Demo&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt;Project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have not already done so, create an SSIS project named ExpressionLanguageDemo.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:804px;HEIGHT:570px;" height=570 src="http://vsteamsystemcentral.com/images/ext/ExprLang_00.png" width=804&gt;&lt;/P&gt;
&lt;P&gt;Once the&amp;nbsp;project is created, open Solution Explorer and rename Package.dtsx - change the name to DynamicProperties.dtsx. If you've already created the project, right-click the SSIS Packages folder in Solution Explorer and click New Package - and rename that package to DynamicProperties.dtsx. When prompted, rename the package object as well. (I think you should always do this - I always answer this message box by clicking the Yes button.)&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_01.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A New Source&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Before we begin connect to your instance of SQL Server - I'm using (local) - and execute the following T-SQL statement:&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;use &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;master&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;not &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;select &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; from &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#008000&gt;sys.databases&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; where &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;'TestSource'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;Create &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;Database &lt;/FONT&gt;&lt;/FONT&gt;TestSource&lt;BR&gt;go&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;use&lt;/FONT&gt;&lt;/FONT&gt; TestSource&lt;BR&gt;go&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;/P&gt;
&lt;P&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; &lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#008000&gt;sys.schemas&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;'Person'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; declare&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; @Sql &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;varchar&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt;100&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; @Sql &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;'create schema Person'&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; exec&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt;@Sql&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt;&lt;FONT size=2&gt;go&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;if &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;not &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;select &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; from &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#008000&gt;sys.tables&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; where &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;'Contact'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; select &lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;top&lt;/FONT&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;1000&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;ContactID&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt;Title&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;FirstName&lt;BR&gt;&lt;FONT color=#808000&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;MiddleName&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;LastName&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp; into&lt;/FONT&gt;&lt;/FONT&gt; Person&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Contact&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;from&lt;/FONT&gt;&lt;/FONT&gt; AdventureWorks&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Person&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Contact&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;end&lt;BR&gt;else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; truncate &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;table&lt;/FONT&gt;&lt;/FONT&gt; Person&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Contact&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; insert &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;into&lt;/FONT&gt;&lt;/FONT&gt; Person&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Contact&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; select &lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;top&lt;/FONT&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080&gt;1000&lt;/FONT&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;ContactID&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=+0&gt;Title&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;FirstName&lt;BR&gt;&lt;FONT color=#808000&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;MiddleName&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;LastName&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; from&lt;/FONT&gt;&lt;/FONT&gt; AdventureWorks&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Person&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;.&lt;/FONT&gt;&lt;/FONT&gt;Contact&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;end&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;This script creates a new database with a table named dbo.Contact, which it populates from the AdventureWorks database. We'll use this other data source to demonstrate a cool use of dynamic property expressions.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Manage the Connection&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Rename the (local).AdventureWorks Connection Manager to MySource:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_02.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click MySource and press the F4 key to display Properties. Highlight the ConnectionString property value and copy it to the clipboard.&lt;/P&gt;
&lt;P&gt;Right-click anywhere in the white-space of the Control Flow and click Variables. Create a new variable named ConStr.&amp;nbsp;Check to make sure the Scope of the Varibale is DynamicProperties (the package) and set the Data Type to String. In the Value textbox, paste the contents of the clipboard (the connection string of the MySource connection manager).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Back&amp;nbsp;To Our Regularly Scheduled&amp;nbsp;Flow...&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Drag an&amp;nbsp;Execute SQL&amp;nbsp;Task onto the Control Flow and double-click the&amp;nbsp;Execute SQL Task&amp;nbsp;to open the editor. Drag an OLE DB Source onto the canvas. Double-click the OLE DB Source to open the editor.&amp;nbsp;Set the Connection property to MySource.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Set the Data Access Mode to SQL Command and enter the following T-SQL statement into the SQL Command Text textbox:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;FONT color=#ff00ff&gt;&lt;FONT color=#ff00ff&gt;Count&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;FONT color=#808080&gt;(*)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;From&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Person&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Set the ResultSet property to Single Row:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_03.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click the Result Set page and then click the Add button. Set the Result Name to 0. Drop down the Variable Name column and click &amp;lt;New Variable&amp;gt;:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_04.jpg"&gt;&lt;/P&gt;
&lt;P&gt;When the&amp;nbsp;Add Variable form displays, set the Name to CountVal, Value Type to Int32, and the Value to 0:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_05.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click OK to close the Add Variable form:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_06.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click&amp;nbsp;OK again to close the editor. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Follow the Script&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task onto the Control Flow and connect a precedence constraint (green arrow) from the Execute SQL Task to the Script Task. Double-click the Script Task to open the editor.Click the Script page and set the ReadOnlyVariables property to CountVal. Set the ReadWriteVariables property&amp;nbsp;to ConStr:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_07.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Design Script button to open the Visual Studio for Applications (VSA) editor. &lt;/P&gt;
&lt;P&gt;Replace the code with the following:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&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;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&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;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&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;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; Microsoft.SqlServer.Dts.Runtime&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ScriptMain&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&amp;nbsp;Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sConStr &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ConStr"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iCountVal &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"CountVal"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; sMsg = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ConnectionString: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sConStr&lt;BR&gt;&amp;nbsp; sMsg = sMsg &amp;amp; vbCrLf &amp;amp; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Count: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iCountVal.ToString&lt;BR&gt;&lt;BR&gt;&amp;nbsp; MsgBox(sMsg)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ConStr"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value = Strings.Replace(sConStr, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"AdventureWorks"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TestSource"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&amp;nbsp;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;BR&gt;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;This script reads the value of the ConStr and CountVal variables, then displays them in a message box. Finally, the script changes the value of the ConStr variable, replacing the AdventureWorks database with the TestSource&amp;nbsp;database. We'll use this change in a bit.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Close the VSA editor and click the OK button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Go Back, Jack, Do It Again...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Copy the Execute SQL Task and paste it in the Control Flow. Connect the Script Task to the pasted Execute SQL Task (Execute SQL Task 1).&lt;/P&gt;
&lt;P&gt;Drag another Script Task onto the Control Flow. Connect&amp;nbsp;a precedence constraint from Execute SQL Task 1 to Script Task&amp;nbsp;1 and double-click it to open the editor. As before, add ConStr to the ReadOnlyVariables property and CountVal to the ReadWriteVariables property. Click the Design Script&amp;nbsp;button and paste the same code as before into this Script Task.&lt;/P&gt;
&lt;P&gt;I can hear you thinking: "Andy, why not just copy and paste the Script Task?" That's an excellent question! Script Tasks are very fickle on the clipboard. On 32-bit systems, you get better results. On x64, it gets ugly. The task fails with the error:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Error: Precompiled script failed to load. The computer that is running the Script Task does not have a compiler capable of recompiling the script. To recompile the script, see the Microsoft Knowledge Base article, KB931846 (&lt;/EM&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=81885"&gt;&lt;EM&gt;http://go.microsoft.com/fwlink/?LinkId=81885&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;).&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Ugly.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;One Last Thing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ok. We're counting the rows in the AdventureWorks.Person.Contact table and displaying that value in a message box. Then, we're altering the connection string contained in the ConStr variable to point from AdventureWorks to TestSource, and then re-executing the Count query. Then we're displaying the ConStr variable value and the Count value again.&lt;/P&gt;
&lt;P&gt;We're almost done. Here's where we use dynamic property expressions.&lt;/P&gt;
&lt;P&gt;Click the MySource Connection Manager and press the F4 key to display the properties. Click the the Expressions property, then the ellipsis (...) button in the value textbox. The Property Expressions Editor form displays. Click the Property dropdown and select the ConnectionString property. In the Expression textbox, type @ConStr. &lt;/P&gt;
&lt;P&gt;This maps the value contained in the ConStr variable into the ConnectionString property of the MySource Connection Manager - dynamically. Change the variable value and the ConnectionString changes. It's that simple - and that cool.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Test It!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Execute the package in debug mode to view the results:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_08.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DP_09.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Changing a connection string dynamically is but one use of Dynamic Property Expressions, albeit a very powerful use.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=380" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Expression+Language/default.aspx">Expression Language</category></item><item><title>SSIS Expression Language and the Conditional Split Transformation</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/19/ssis-expression-language-and-the-conditional-split-transformation.aspx</link><pubDate>Thu, 19 Feb 2009 22:12:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:371</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/371.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=371</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post is part of a series titled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/29/an-introduction-to-the-ssis-expression-language.aspx"&gt;An Introduction to the SSIS Expression Language&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In this post, I demonstrate the SSIS Expression Language and the Conditional Split Transformation. &lt;/P&gt;
&lt;P&gt;To build the demo project described in this article you will need SSIS 2005 and the AdventureWorks sample database (which can be downloaded at &lt;A href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004&lt;/A&gt;). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Build The Demo&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt;Project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have not already done so, create an SSIS project named ExpressionLanguageDemo.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:804px;HEIGHT:570px;" height=570 src="http://vsteamsystemcentral.com/images/ext/ExprLang_00.png" width=804&gt;&lt;/P&gt;
&lt;P&gt;Once the&amp;nbsp;project is created, open Solution Explorer and rename Package.dtsx - change the name to ConditionalSplit.dtsx. If you've already created the project, right-click the SSIS Packages folder in Solution Explorer and click New Package - and rename that package to ConditionalSplit.dtsx. When prompted, rename the package object as well. (I think you should always do this - I always answer this message box by clicking the Yes button.)&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_01.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Drag a Data Flow Task onto the Control Flow and click the Data Flow tab to edit. Drag an OLE DB Source onto the canvas. Double-click the OLE DB Source to open the editor.&amp;nbsp;As in the post&amp;nbsp;entitled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/30/ssis-expression-language-and-variables.aspx" target=_blank&gt;SSIS Expression Language and Variables&lt;/A&gt;, click the New button to&amp;nbsp;create a new Connection Manager to the AdventureWorks database. &lt;/P&gt;
&lt;P&gt;Set the Data Access Mode to SQL Command and enter the following T-SQL statement into the SQL Command Text textbox:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&amp;nbsp; ContactID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;From&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Person&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click OK to close the editor. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;On One Condition...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Conditional Split transformation onto the Data Flow canvas and connect the OLE DB Source Adapter to it:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_02.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Double-click the Conditional Split to open the editor. Expand the NULL Functions folder in the Operations list (upper right). Drag an ISNULL function into the Condition column of the first row in the Conditions grid. Expand the Columns folder in the Values list (upper left). Click and drag the Title column from the list onto the &amp;lt;&amp;lt;expression&amp;gt;&amp;gt; placeholder in the ISNULL expression:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_03.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The default name for a Condition is "Case &lt;EM&gt;n&lt;/EM&gt;" where &lt;EM&gt;n&lt;/EM&gt; is the row number of the Condition in the Condition grid.&lt;/P&gt;
&lt;P&gt;Next, drag and drop the ContactID column into the second row's Condition column. Complete the expression so that it reads:&amp;nbsp;&lt;FONT face="Courier New"&gt;ContactID &amp;lt;= 5000&lt;/FONT&gt;. Rename the Outputs to &lt;FONT face="Courier New"&gt;NullTitles&lt;/FONT&gt; and &lt;FONT face="Courier New"&gt;SmallContactIDs&lt;/FONT&gt; respectively:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_04.jpg"&gt;&lt;/P&gt;
&lt;P&gt;What we've done here is define a couple of outputs. One of the outputs will contain rows where the Title is NULL. The other will contain - this is important, pay attention - rows where the Title is&amp;nbsp;&lt;EM&gt;not&lt;/EM&gt; NULL &lt;EM&gt;and&lt;/EM&gt; the ContactID is less than or equal to 5000. Why is this? It's because rows with NULL Titles are redirected to the NullTitles output first. The ContactID value of these rows&amp;nbsp;is never evaluated to see if it's less than or equal to 5000. If neither condition applies to a row, that row is sent to the Conditional Split Default Output. This operates a lot like a Switch statement in C# or a Select Case statement in VB, with the Default Output acting like the Else branch. You can adjust the order of condition evaluation using the spinner buttons on the right:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_05.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click OK to close the Conditional Split editor. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Terminate It!&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Drag a Multicast transformation onto the Data Flow task surface. We'll use the Multicast to terminate a Data Flow Path. Drag a Data Flow Path from the Conditional Split transformation to the Multicast. When you do this, you'll be prompted to select an output from the Conditional Split to connect to the Multicast input:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_06.jpg"&gt;&lt;/P&gt;
&lt;P&gt;After selecting an Output, click Ok to close:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_CS_07.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The title of the output you selected&amp;nbsp;appears in&amp;nbsp;the&amp;nbsp;label.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Expressions are used to branch data row flow inside the Data Flow Task with the Conditional Split transformation.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&amp;nbsp;&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=371" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Expression+Language/default.aspx">Expression Language</category></item><item><title>SSIS Expression Language and the Derived Column Transformation</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/01/ssis-expression-language-and-the-derived-column-transformation.aspx</link><pubDate>Sun, 01 Feb 2009 02:03:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:366</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/366.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=366</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post is part of a series titled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/29/an-introduction-to-the-ssis-expression-language.aspx"&gt;An Introduction to the SSIS Expression Language&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In this post, I demonstrate the SSIS Expression Language and the Derived Column Transformation. &lt;/P&gt;
&lt;P&gt;To build the demo project described in this article you will need SSIS 2005 and the AdventureWorks sample database (which can be downloaded at &lt;A href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004&lt;/A&gt;). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Add To&amp;nbsp;The Demo&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt;Project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have not already done so, create an SSIS project named ExpressionLanguageDemo.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:804px;HEIGHT:570px;" height=570 src="http://vsteamsystemcentral.com/images/ext/ExprLang_00.png" width=804&gt;&lt;/P&gt;
&lt;P&gt;Once the&amp;nbsp;project is created, open Solution Explorer and rename Package.dtsx - change the name to DerivedColumn.dtsx. If you've already created the project, right-click the SSIS Packages folder in Solution Explorer and click New Package - and rename that package to DerivedColumn.dtsx. When prompted, rename the package object as well. (I think you should always do this - I always answer this message box by clicking the Yes button.)&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:265px;HEIGHT:205px;" src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_01.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Drag a Data Flow Task onto the Control Flow. Click the Data Flow tab to begin editing, and drag an OLE DB Source onto the canvas. Double-click the OLE DB Source to open the editor.&amp;nbsp;As in the post&amp;nbsp;entitled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/30/ssis-expression-language-and-variables.aspx" target=_blank&gt;SSIS Expression Language and Variables&lt;/A&gt;, click the New button to&amp;nbsp;create a new Connection Manager to the AdventureWorks database. &lt;/P&gt;
&lt;P&gt;Set the Data Access Mode to SQL Command and enter the following T-SQL statement into the SQL Command Text textbox:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&amp;nbsp; ContactID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&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 color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;From&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Person&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click OK to close the editor. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Learning&amp;nbsp;To Derive&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Derived Column Transformation onto the Data Flow canvas and connect the OLE DB Source Adapter to it using a Data Flow Task:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_02.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Double-click the Derived Column transformation to open the editor. &lt;/P&gt;
&lt;P&gt;Let's start somewhat in the middle. The Derived Column column of the editor contains a list of all the columns flowing into the transformation, plus an entry for "&amp;lt;add as new column&amp;gt;":&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_03.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you select one of the columns flowing into the transformation, you can use an Expression to modify the value in some way. Why would you do this? Let's look at an example.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Replacement&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;From the Derived Column dropdown, select "Replace 'MiddleName'":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_04.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Note&amp;nbsp;a few properties are automatically populated when you make the selection. The Derived Column Name is set to "MiddleName." This makes sense - your selection indicates you want to replace the current values in the MiddleName column. The Data Type column contains the equivalent SSIS data type for the MiddleName field in the Person.Contact table. &lt;/P&gt;
&lt;P&gt;Data Type coercion in SSIS is interesting - there are quite a few moving parts. The MiddleName field is an NVARCHAR(50) data type in the Person.Contact table. The connection between SSIS and the AdventureWorks database is made using an OLE DB Connection Manager. There is some data type corecion&amp;nbsp;in the database - OLE DB provider - SSIS connection layers. By the time the data type makes it into the SSIS data flow pipeline, it is represented as a DT_WSTR, or Unicode string. The Length column is also populated with 50. &lt;/P&gt;
&lt;P&gt;The Expression column is a blank slate&amp;nbsp;upon which you write the code that controls&amp;nbsp;value. You can hard code a value, such as a space, by enclosing a space inside double-quotes:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;" "&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_05.jpg"&gt;&lt;/P&gt;
&lt;P&gt;You can hard code a Null value by using a NULL function. Expand the NULL Functions folder in the upper right of the Derived Column transformation and drag the Null function for the DT_WSTR data type into the Expression textbox, replacing the &amp;lt;&amp;lt;length&amp;gt;&amp;gt; placeholder with the length of the column (50):&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;NULL(DT_WSTR, 50)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_06.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Or you can conditionally replace the MiddleName value. In this case, we'll replace Null middle names with a space. If not Null, we'll allow the existing value to continue in the data flow pipeline. To do this, use the &lt;A class="" href="http://en.wikipedia.org/wiki/Ternary_operation" target=_blank&gt;ternary&lt;/A&gt; syntax:&lt;/P&gt;&lt;FONT face="Courier New"&gt;
&lt;P&gt;[&lt;EM&gt;Test Condition&lt;/EM&gt;] ? [&lt;EM&gt;True Operation&lt;/EM&gt;] : [&lt;EM&gt;False Operation&lt;/EM&gt;]&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;To replace Null MiddleName values with a space, use the following expression:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;IsNull(MiddleName) ? " " : MiddleName&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_07.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Add One&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In the second row, let's add a new column. In the Derived Column dropdown, select "&amp;lt;add as new column&amp;gt;". Note the only column auto-populated is the Derived Column Name column, and it contains "Derived Column 1". Rename this column "FullName." Add the following expression:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;FirstName + (IsNull(MiddleName) ? " " : MiddleName) + LastName&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_08.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Note the Data Type DT_WSTR for both columns. Suppose we want to change the data type? We can cast the data type for added columns. Expand the Type Casts function folder and&amp;nbsp;drag a DT_STR cast to the beginning of the&amp;nbsp;Expressions textbox - replacing the&amp;nbsp;&amp;lt;&amp;lt;length&amp;gt;&amp;gt; placeholder with&amp;nbsp;150 (the summed lengths of the columns) and the &amp;lt;&amp;lt;code_page&amp;gt;&amp;gt; placeholder with 1252 for&amp;nbsp;en-us (for US English, feel free to substitute with your code page if different) -&amp;nbsp;to convert the value from Unicode to an ASCII string. The FullName expression should now read:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;(DT_STR, 150, 1252)(FirstName + (IsNull(MiddleName) ? " " : MiddleName) + LastName)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Note the Data Type column is now a String:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_09.jpg"&gt;&lt;/P&gt;
&lt;P&gt;You can add a DT_STR Cast statement to the expression for the MiddleName, but it doesn't change the Data&amp;nbsp;Type.&amp;nbsp;Why can't we change the data type for existing columns in the Derived Column transformation? We're replacing the values, not changing the data type. Is it impossible to change the data type of an existing column in the Derived Column? Let's put it this way: It is not possible to convert the data type of a column when you are merely replacing the value. You can, however, accomplish the same goal by creating a new column in the Data Flow.&lt;/P&gt;
&lt;P&gt;To demonstrate, configure the third row to add a new column. Name the new column StrMiddleName and set the expression to:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;(DT_STR, 150, 1252)MiddleName&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_DC_10.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Other options: You can also use a Data Conversion Transformation to change the data type of a column in the data flow pipeline, but the Data Conversion also adds a column to the data flow pipeline. You can also cast the value in T-SQL from the source (in the OLE DB Source Adapter).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The Derived Column Transformation is very flexible and powerful. The mathematical and string parsing functions are more easily understood by folks with a developer background. The ETL-specific functions - such as those demonstrated in this post: NULL fields, type-casting, and ternary conditional operations - are not as commonly understood.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=366" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Expression+Language/default.aspx">Expression Language</category></item><item><title>SSIS Expression Language and Variables</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/30/ssis-expression-language-and-variables.aspx</link><pubDate>Fri, 30 Jan 2009 02:02:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:305</guid><dc:creator>andy</dc:creator><slash:comments>5</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/305.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=305</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post is part of a series titled &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/29/an-introduction-to-the-ssis-expression-language.aspx"&gt;An Introduction to the SSIS Expression Language&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In this post, I demonstrate the SSIS Expression Language and Variables. &lt;/P&gt;
&lt;P&gt;To build the demo project described in this article you will need SSIS 2005 and the AdventureWorks sample database (which can be downloaded at &lt;A href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004&lt;/A&gt;). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Build The Demo&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt;Project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have not already done so, create an SSIS project named ExpressionLanguageDemo.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:804px;HEIGHT:570px;" height=570 src="http://vsteamsystemcentral.com/images/ext/ExprLang_00.png" width=804&gt;&lt;/P&gt;
&lt;P&gt;Once the&amp;nbsp;project is created, open Solution Explorer and rename Package.dtsx - change the name to Variables.dtsx. When prompted, rename the package object as well. (I think you should always do this - I always answer this message box by clicking the Yes button.)&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:247px;HEIGHT:192px;" height=192 src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_02.png" width=247&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Make&amp;nbsp;Some Variables&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the SSIS dropdown menu and select Variables.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:224px;HEIGHT:205px;" height=205 src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_03.png" width=224&gt;&lt;/P&gt;
&lt;P&gt;When the Variables&amp;nbsp;window displays, click the Add Variable button (first button on the left) to create a new variable with the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;Name: SQL&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Scope: Variables&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Data Type: String&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Value: Select 1 As One&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG style="WIDTH:497px;HEIGHT:209px;" height=209 src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_04.png" width=497&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I included a syntactically-correct Transact-SQL statement as the default value. Why? Later I plan to use this statement in an Execute SQL Task. I chose to include a valid default to avoid validation warnings and errors.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Validation: SSIS provides design-time and run-time&amp;nbsp;&lt;STRONG&gt;validation&lt;/STRONG&gt; of components and settings. In general, this is&amp;nbsp;a good thing as it catches real and potential errors before the SSIS package is executed. SSIS also provides a means of ignoring design-time validation warnings and errors via the &lt;STRONG&gt;DelayValidation&lt;/STRONG&gt; property.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Add Some Tasks&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task onto the Control Flow and double-click to open the editor. If you're using SSIS2008, set the ScriptLanguage property on the Script page&amp;nbsp;to Microsoft Visual Basic 2008. (If you're using SSIS 2005 you have no other option.) Add SQL to the list of ReadOnlyVariables and click the Design Script (Edit Script in SSIS 2008) button to open the script engine editor.&lt;/P&gt;
&lt;P&gt;Replace the code in Public Sub Main() with the following:&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQL &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&amp;nbsp; MsgBox(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQL)&lt;BR&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;Close the Visual Studio for Applications editor and click OK to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;Execute the package and observe the result. You should see a message box displaying the value of the SQL variable:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_05.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Just the SQL, Ma'am&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Next, add an Execute SQL Task to the Control Flow canvas and connect a Precedence Constraint from the Script Task to the Execute SQL Task. Double-click the Execute SQL Task to open the editor.&amp;nbsp;Leave the ConnectionType property set to OLE DB. Click the dropdown for the Connection property and click "&amp;lt;New connection...&amp;gt;":&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_06.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When the Configure OLE DB Connection Manager form displays,&amp;nbsp;select a connection to the AdventureWorks database if one exists in your Data Connections list. If not, click the New button. Configure the connection to your server - I use (local) for my default local instance - and the AdventureWorks database:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_07.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click OK until you return to the Execute SQL Task editor. You have three options for the&amp;nbsp;SQLSourceType property: Direct input, File Connection, and Variable. There is a limit to the number of characters you can enter using direct input. I'm not sure but I think it's around 4,000 or so. I've hit this limit once - and in a big way: the client required 4 MB of dynamic SQL. I would add italics to that statement if it didn't make it look so funny. After unsuccessfully lobbying for a better approach, I managed the dynamic SQL in a script task that wrote it to a file, and used a file connection SQLSourceType to execute it.&lt;/P&gt;
&lt;P&gt;For our example, set the SQLSourceType to Variable. Then set the SourceVariable property (which was hidden until you selected the SQLSourceType Variable) to User::SQL.&lt;/P&gt;
&lt;P&gt;Click OK to close the editor and execute the package to test. Click OK when the message box displays. The Execute SQL Task should succeed:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_08.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Make it Dynamic&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;First, we'll add some more variables and&amp;nbsp;build a dynamic SQL statement the old school way.&lt;/P&gt;
&lt;P&gt;Create the following package-scoped String data type variables [with default values]:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;SelectClause [SELECT Title, FirstName, LastName, EmailAddress]&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;FromClause [FROM Person.Contact]&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;WhereClause&amp;nbsp;[WHERE LastName IN ('Smith','Jones')]&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_09.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Open the Script Task editor and navigate to the Script page. Move the SQL variable from the ReadOnlyVariables property to the ReadWriteVariables property. Add SelectClause, FromClause, and WhereClause to the ReadOnlyVariables property:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_10.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Click the Design Script button and replace the code in&amp;nbsp;&lt;FONT color=#0000ff&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;/FONT&gt; with the following:&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;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSelect &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SelectClause"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sFrom &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"FromClause"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sWhere &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"WhereClause"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQL &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = sSelect &amp;amp; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sFrom &amp;amp; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sWhere&lt;BR&gt;&amp;nbsp; Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value = ssql&lt;BR&gt;&amp;nbsp; MsgBox(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQL)&lt;BR&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Close the VSA editor and click OK to close the Script Task editor. Execute the package to examine the results:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_11.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Express Yourself!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Let's look at another way to accomplish the same result, this time using expressions.&lt;/P&gt;
&lt;P&gt;First, edit the Script Task&amp;nbsp;&lt;FONT color=#0000ff&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;/FONT&gt; code to read:&lt;/P&gt;&lt;FONT face="Courier New"&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQL &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&amp;nbsp; MsgBox(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQL)&lt;BR&gt;&amp;nbsp; Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;This returns the script task functionality to simply displaying the value of the SQL variable. &lt;/P&gt;
&lt;P&gt;In the Variables window, click on the SQL variable and press the F4 key to display the properties of the SQL variable. Change the EvaluateAsExpression property to True and enter the following expression in the Expression property:&lt;/P&gt;&lt;FONT face="Courier New"&gt;
&lt;P&gt;@SelectClause + " " + @FromClause + " " + @WhereClause&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/ExprLang_Var_12.jpg"&gt;&lt;/P&gt;
&lt;P&gt;This changes the way the SQL variable works. It no longer contains the value specified in the Value column of the Variables window. Instead, the value of the SQL variable is determined by the expression, which contains the SelectClause, FromClause, and WhereClause variables.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The SSIS Expression Language&amp;nbsp;can be used with variables to dynamically set the value of one variable from one or more other variables.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=305" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Expression+Language/default.aspx">Expression Language</category></item><item><title>An Introduction to the SSIS Expression Language</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/29/an-introduction-to-the-ssis-expression-language.aspx</link><pubDate>Thu, 29 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:304</guid><dc:creator>andy</dc:creator><slash:comments>2</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/304.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=304</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The SSIS Expression Language is one of the steeper slopes on the SSIS learning curve. Many database professionals have never been exposed to the syntax. In this series, I provide examples that demonstrate common uses for the SSIS Expression Language.&lt;/P&gt;
&lt;P&gt;The examples are built in SSIS 2005. Why? Not everyone has access to SSIS 2008 at this time, and the examples work in both platforms. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/01/30/ssis-expression-language-and-variables.aspx" target=_blank&gt;SSIS Expression Language and Variables&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/01/ssis-expression-language-and-the-derived-column-transformation.aspx" target=_blank&gt;SSIS Expression Language and the Derived Column Transformation&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/19/ssis-expression-language-and-the-conditional-split-transformation.aspx" target=_blank&gt;SSIS Expression Language and the&amp;nbsp;Conditional Split&amp;nbsp;Transformation&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2009/02/21/ssis-expression-language-and-dynamic-property-expressions.aspx" target=_blank&gt;SSIS Expression Language and Dynamic Property Expressions&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Syntax&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Books Online has some good information about the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms141232(SQL.90).aspx"&gt;SSIS Expression Language&lt;/A&gt;.&amp;nbsp;&amp;nbsp;This is an excellent place to start.&lt;/P&gt;
&lt;P&gt;For starters, the syntax shares similarities with what I call "curly-brace" languages: C++, C#, Java, etc. It's obvious (to me at least) from the "=" operators: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;== for comparison&lt;/LI&gt;
&lt;LI&gt;= for assignment&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Literals&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms141001(SQL.90).aspx"&gt;Literals&lt;/A&gt; often prove challenging for folks unfamiliar with the syntax. Of particular interest is escape characters. The two escape sequences I'm most often asked about are double quotes and the backslash. As in curly-brace languages, the backslash is the escape indicator. This makes Windows paths loads of fun in SSIS. &lt;/P&gt;
&lt;P&gt;For example, you think you're storing the path C:\results\new\andysdata.csv, but what you're telling SSIS is C: [Carriage Return] esults [New line] ew [Alert] ndysdata.csv. Yeah. That's gonna make for some interesting error messages! So how to address it? C:\\results\\new\\andysdata.csv works, as two backslashes together are the escape sequence for a single backslash. &lt;/P&gt;
&lt;P&gt;If you want to include double-quotes in an expression, the escape sequence is backslash + " - \".&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Casting&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms141704(SQL.90).aspx"&gt;Casting&lt;/A&gt; is also unintuitive to the uninitiated.&amp;nbsp;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms141260(SQL.90).aspx"&gt;SSIS implicit conversions&lt;/A&gt; throw me every time. SSIS has its own set of data types, and the different data providers have their set of data types.&amp;nbsp;Some interesting things happen where these data types meet.&lt;/P&gt;
&lt;P&gt;To cast&amp;nbsp;to a string (or SQL Server varchar) data type, preface the value with (DT_STR, [len], [code page]). For example, if you want to cast the integer 42 to a 2-character, en-us string; the expression is (DT_STR, 2, 1252) 42.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;There's more to come in this series. I hope you enjoy it!&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=304" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Expression+Language/default.aspx">Expression Language</category></item><item><title>My 2008 PASS Sumit Presentations</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/09/13/my-2008-pass-sumit-presentations.aspx</link><pubDate>Sat, 13 Sep 2008 19:05:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:307</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/307.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=307</wfw:commentRss><description>&lt;P&gt;I am honored to&amp;nbsp;be selected to present at the &lt;A class="" href="http://summit2008.sqlpass.org/" target=_blank&gt;2008 PASS Summit&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;I'm presenting two sessions: &lt;A class="" href="http://summit2008.sqlpass.org/program-andy-leonard2.html" target=_blank&gt;Test-Driven Development For Database Professionals&lt;/A&gt; and &lt;A class="" href="http://summit2008.sqlpass.org/program-andy-leonard3.html" target=_blank&gt;SSIS Scripting&lt;/A&gt;. I've been working on the presentations recently and realize there will be a few minutes left in the SSIS Scripting talk unless I talk slow. (Some people say I talk slow enough already - and that I have a Southern accent. Can you believe it?) &lt;/P&gt;
&lt;P&gt;Anyway, I open the floor to you good people - the readers of my blog: What cool (or useful, or challenging)&amp;nbsp;SSIS Scripting demo would &lt;EM&gt;you&lt;/EM&gt; like to see? We'll make it a contest. Leave a comment here (keep in mind I moderate comments so they will not appear automatically) and I'll pick one. &lt;/P&gt;
&lt;P&gt;I'll have to come up with some cool gift to award the winner. &lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=307" width="1" height="1"&gt;</description></item><item><title>SSIS Design Pattern - Collect Enterprise SQL Server Database Metadata With SSIS</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/08/27/collect-enterprise-sql-server-database-metadata-with-ssis.aspx</link><pubDate>Wed, 27 Aug 2008 06:06:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:284</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/284.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=284</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A few months back I received an email from a nice lady who was beginning to work with SSIS. She was trying to use SSIS to automate metadata collection in her enterprise and she had made&amp;nbsp;a good start in the package she attached to the email. She had a few questions so I opened the package and began poking around some to answer them. I realized it would take me a lot longer to type out answers to her questions than to simply build the SSIS package for her (or at least make a good start). So I did. This post is about that package.&lt;/P&gt;
&lt;P&gt;I've built similar stuff in the past to monitor the schemas of data warehouse sources. "Why would you do such a thing, Andy?"&amp;nbsp;I know this will come as a shock to you: Sometimes developers and DBAs make changes to the schemas of data warehouse sources and don't tell the data warehouse people. Ok, I made that part up - that never happens. But think about how you could address the issue if it ever happened. Hypothetically.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;First Things First&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;There are a couple approaches&amp;nbsp;to collecting SQL Server database metadata.&amp;nbsp;My preference is&amp;nbsp;to automate the process to the point that I can drop it almost anywhere and get results with a minimal amount of tinkering and tweaking. For me, this means my development process is iterative because I never get things right the first time. Ever.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;This Version&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The current version of this package is striped 0.4. The version I write about here is&amp;nbsp;version 0.1.&amp;nbsp;It serves to introduce the principles and functionality in a less complex way - allowing you the Reader to take the project in any direction you deem cool. But that means there's stuff missing from this SSIS package that I would normally include. Stuff like error handling and logging, for example.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Place For My Data&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Before I started I decided&amp;nbsp;to store the data in&amp;nbsp;a SQL Server database. You don't need the database for the SSIS part of the project described in this post. You can simply skip the tasks that write the metadata to the database. But if you&amp;nbsp;skip them&amp;nbsp;and I decide to write about version 0.2, you will come back and want the database scripts. You can download them &lt;A class="" href="http://vsteamsystemcentral.com/dnn/Articles/EnterpriseDBMetadata/tabid/116/Default.aspx" target=_blank&gt;here&lt;/A&gt; (free registration required).&lt;/P&gt;
&lt;P&gt;In this post, I am not going to focus on the database I designed. Like the SSIS package, this is version 0.1 of the database. There is no attempt at referential integrity in this version. It is a simple, single-pass effort at designing a landing zone for this data.&lt;/P&gt;
&lt;H4&gt;A. The Servers&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;Servers? Raise Your Hands Please&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Create a new SSIS&amp;nbsp;project and name it EnterpriseDBMetadata. Name the package EnterpriseDBMetadata.dtsx. &lt;/P&gt;
&lt;P&gt;Create the following&amp;nbsp;package-scoped variables (in alphabetical order):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ColumnDataType (String)&lt;/LI&gt;
&lt;LI&gt;ColumnName (String)&lt;/LI&gt;
&lt;LI&gt;ColumnNames (Object)&lt;/LI&gt;
&lt;LI&gt;ColumnObjectID (Int32)&lt;/LI&gt;
&lt;LI&gt;DatabaseId (Int32)&lt;/LI&gt;
&lt;LI&gt;DatabaseName (String)&lt;/LI&gt;
&lt;LI&gt;DatabaseNames (Object)&lt;/LI&gt;
&lt;LI&gt;DatabaseObjectId (Int32)&lt;/LI&gt;
&lt;LI&gt;saSQLServers (Object)&lt;/LI&gt;
&lt;LI&gt;SchemaId (Int32)&lt;/LI&gt;
&lt;LI&gt;SchemaName (String)&lt;/LI&gt;
&lt;LI&gt;SchemaNames (Object)&lt;/LI&gt;
&lt;LI&gt;SchemaObjectId (Int32)&lt;/LI&gt;
&lt;LI&gt;SQLServerId (Int32)&lt;/LI&gt;
&lt;LI&gt;SQLServerInstanceName (String)&lt;/LI&gt;
&lt;LI&gt;TablesAndViewsId (Int32)&lt;/LI&gt;
&lt;LI&gt;TablesAndViewsName (String)&lt;/LI&gt;
&lt;LI&gt;TablesAndViewsNames (Object)&lt;/LI&gt;
&lt;LI&gt;TablesAndViewsObjectId (Int32)&lt;/LI&gt;
&lt;LI&gt;TablesAndViewsType (String)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG style="WIDTH:485px;HEIGHT:556px;" height=556 src="http://vsteamsystemcentral.com/images/ext/EntDBMetdata_1.png" width=485&gt;&lt;/P&gt;
&lt;P&gt;Add&amp;nbsp;a Script Task to the Control Flow and rename it Enumerate SQL Server Instances. Editing the Script Task,&amp;nbsp;add saSQLServers to the ReadWriteVariables property:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:580px;HEIGHT:138px;" height=138 src="http://vsteamsystemcentral.com/images/ext/EntDBMetdata_2.png" width=580&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Design Script button to open&amp;nbsp;the Visual Studio for Applications (VSA) script designer and, in Project Explorer,&amp;nbsp;right-click References to add references to the Microsoft.SqlServer.Smo, Microsoft.SqlServer.SmoEnum, and Microsoft.SqlServer.SqlEnum assemblies:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:316px;HEIGHT:322px;" height=322 src="http://vsteamsystemcentral.com/images/ext/EntDBMetdata_3.png" width=316&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next&amp;nbsp;add&amp;nbsp;the following VB.Net code to the script designer:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Data&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.Math&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SqlServer.Dts.Runtime&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SqlServer.Management.Smo&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Imports&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SqlServer.Management.Common&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ScriptMain&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; Public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; oSmo &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;New&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SmoApplication&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dtSQLServers &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DataTable = oSmo.EnumAvailableSqlServers()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iSQLServerCount &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = dtSQLServers.Rows.Count - 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; i &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = 0&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; saSQLServers() &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; saSQLServers(iSQLServerCount)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Each&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; row &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DataRow &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;In&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dtSQLServers.Rows&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;sSQLServerInstanceName = row(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Name"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;'MsgBox(sSQLServerInstanceName)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;saSQLServers(i) = sSQLServerInstanceName&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"saSQLServers"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value = saSQLServers&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Dts.TaskResult = Dts.Results.Success&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;BR&gt;End&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This is a handy piece of code. It basically creates a list of all the SQL Server instances it can locate on your network and shoves that list into an SSIS variable called saSQLServers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Shredding The List&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Steve Jones -&amp;nbsp;my&amp;nbsp;friend, fellow SQL Server MVP, and editor&amp;nbsp;of &lt;A class="" href="http://www.sqlservercentral.com/" target=_blank&gt;SQL Server Central&lt;/A&gt;&amp;nbsp;- was kind enough to publish a recent &lt;A class="" href="http://www.sqlservercentral.com/articles/SSIS/64014/" target=_blank&gt;article&lt;/A&gt; I wrote about using the Foreach Loop Container to &lt;EM&gt;shred&lt;/EM&gt; object variables. You can read more about that &lt;A class="" href="http://www.sqlservercentral.com/articles/SSIS/64014/" target=_blank&gt;here&lt;/A&gt;. Shredding is just a fancy word (we call them "$3 words" here in Farmville) for reading individual items in a collection.&lt;/P&gt;
&lt;P&gt;Next drop a Foreach Loop Container onto the Control Flow and connect the Script Task to it with a Success Precedence Constraint:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:389px;HEIGHT:241px;" height=241 src="http://vsteamsystemcentral.com/images/ext/EntDBMetdata_4.png" width=389&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Double-click the Foreach Loop Container to open the editor. On the General page&amp;nbsp;rename it ForEach SQL Server Instance.&amp;nbsp;Select the Foreach From Variable Enumerator on the Collection page, and then select the saSQLServers variable:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:610px;HEIGHT:234px;" height=234 src="http://vsteamsystemcentral.com/images/ext/EntDBMetdata_5.png" width=610&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;On the Variable Mappings page, map the SQLServerInstanceName variable to Index 0. There's only one column of items in my saSQLServers variable - it's an SSIS object variable, but it contains a single-dimension String array:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:435px;HEIGHT:86px;" height=86 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_6.png" width=435&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Foreach Loop Container editor.&lt;/P&gt;
&lt;P&gt;Let's take a moment to talk about what we did. We have a variable named saSQLServers that is populated by the Script Task with a list of all the SQL Server instances it can identify on the network. The Foreach Loop Container shreds this variable, walking through each value - each SQL Server instance name, in this case - one at a time. Each pass, it pushes the value of one of those SQL Server instance names into a variable called SQLServerInstanceName.&lt;/P&gt;
&lt;P&gt;In and of itself, this is pretty cool.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Destination Connection&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now we need to connect our SSIS package to SQL Server so we can store the name of the servers we can reach. Right-click inside the Connection Managers window at the bottom of the Control Flow and select New OLE DB Connection:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:269px;HEIGHT:322px;" height=322 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_7.png" width=269&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When the Configure OLE DB Connection Manager form displays, click the New button to display the Connection Manager editor. In the Server Name dropdown, enter the name of the SQL Server instance to which you deployed the EnterpriseDBMetadata &lt;A class="" href="http://vsteamsystemcentral.com/dnn/Articles/EnterpriseDBMetadata/tabid/116/Default.aspx" target=_blank&gt;scripts&lt;/A&gt;. In the "Select or enter a database name" dropdown, select EnterpriseDBMetadata:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:600px;HEIGHT:599px;" height=599 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_8.png" width=600&gt;&lt;/P&gt;
&lt;P&gt;I always recommend testing the connection. Click the Test Connection button to verify connectivity, then click the Ok button to close the Connection Manager editor. Then click the Ok button again to close the Configure OLE DB Connection Manager.&lt;/P&gt;
&lt;P&gt;Rename this connection "EnterpriseDBMetadata.OLEDB".&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Source Connection&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I can hear you thinking "Gosh Andy, you did that backwards! Most people start at the source and &lt;EM&gt;then&lt;/EM&gt; talk about the destination." Yeah, I know. But I'm an engineer at heart and engineers are not normal people. &lt;/P&gt;
&lt;P&gt;How many source Connection Managers do we need?&lt;/P&gt;
&lt;P&gt;"That's a trick question Andy, I &lt;EM&gt;know&lt;/EM&gt; it! But I think we need one for each SQL Server instance out there."&lt;/P&gt;
&lt;P&gt;You are partially correct. It is a trick question -&amp;nbsp;you're right about that. We do need one source Connection Manager for each SQL Server instance, but we are only going to be connected to one SQL Server instance at a time as we&amp;nbsp;iterate through our Foreach Loop Container. So we can get away with one source Connection Manager if we can only find a way to aim it at the individual&amp;nbsp;SQL Server instance we wish, when we wish it.&lt;/P&gt;
&lt;P&gt;So let's do that.&lt;/P&gt;
&lt;P&gt;Create another OLE DB Connection Manager as you did before. This time configure it to connect to a local or developement instance to which you can connect using Windows Authentication. Configure the database name as before and click the Ok buttons to end the Connection Manager creation.&lt;/P&gt;
&lt;P&gt;Rename this Connection Manager "SQLServerInstance.OLEDB".&lt;/P&gt;
&lt;P&gt;Right-click the SQLServerInstance.OLEDB Connection Manager and select Properties. Click on the Expressions Property and then click the ellipsis in the Value textbox for the Expressions Property:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG style="WIDTH:417px;HEIGHT:464px;" height=464 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_9.png" width=417&gt;&lt;/P&gt;
&lt;P&gt;When the Property Expressions form displays, select the ServerName property from the Property dropdown:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:438px;HEIGHT:341px;" height=341 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_10.png" width=438&gt;&lt;/P&gt;
&lt;P&gt;Click on the ellipsis on the Expression textbox to display the Expression Builder form:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:575px;HEIGHT:533px;" height=533 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_11.png" width=575&gt;&lt;/P&gt;
&lt;P&gt;Expand the Variables list and drag the SQLServerInstanceName variable into the Expression textbox as shown above. I recommend always checking the value of an expression. To do so, click the Evaluate Expression button. Click the Ok button to close the Expression Builder, then click the Ok button again to close the Property Expressions editor.&lt;/P&gt;
&lt;P&gt;You've just done something else that's pretty cool, so let's reflect: We have a variable named saSQLServers that is populated by the Script Task with a list of all the SQL Server instances it can identify on the network. The Foreach Loop Container shreds this variable, walking through each value - each SQL Server instance name, in this case - one at a time. Each pass, it pushes the value of one of those SQL Server instance names into a variable called SQLServerInstanceName. And each time it changes the value of the SQLServerInstanceName variable, the SQLServerInstance.OLEDB Connection Manager's connection properties are updated to now point to that instance of SQL Server.&lt;/P&gt;
&lt;P&gt;How cool is that?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Show Me!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I love lamp. And I like Script Tasks. I use Script Tasks a lot (lamps too!). One cool use of them is to show me the value of a variable that's being changed by a Foreach Loop Container. Since we have a Foreach Loop Container that's changing a variable, allow me to demonstrate.&lt;/P&gt;
&lt;P&gt;Drag a Script Task &lt;EM&gt;into&lt;/EM&gt; the Foreach Loop Container and rename it "Show SQL Server Instance Name". Open the editor and add SQLServerInstanceName to the ReadOnlyVariables property:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:608px;HEIGHT:129px;" height=129 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_12.png" width=608&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Add these two lines of code to Sub Main():&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;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQLServerInstanceName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;MsgBox(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL Server Instance Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQLServerInstanceName)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=2&gt;All this script does is read the value currently stored in SQLServerInstanceName and display it in a message box:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;IMG style="WIDTH:286px;HEIGHT:152px;" height=152 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_13.png" width=286&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Close the VSA editor and&amp;nbsp;click the Ok button to close the Script Task editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Test Run Time!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You can run the package now to see which servers it finds. I did. That's how I generated the last image.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Store It&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Next,&amp;nbsp;drag an Execute SQL Task into the ForEach SQL Server Instance Container and connect the Script Task to it using a Success precedence constraint. Name the Execute SQL Task "Add the SQL Server name" and double-click it to open the editor.&lt;/P&gt;
&lt;P&gt;Select the EnterpriseDBMetadata.OLEDB connection in the Connection property dropdown. Click the SQLStatement property and then the ellipsis in the Value. When the Enter SQL Query form displays, paste this T-SQL into the textbox:&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;If&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SQLServerInstanceName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; SQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Insert&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Into&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstanceName&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Output&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Values&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#000000&gt;See the question marks? This is a parameterized query. The question marks are placeholders for parameters. The collection of parameters comprises an array, and the array is zero-based. This means the first question mark - that one in the first If statement - maps to parameter 0. The second maps to parameter 1, the third to parameter 2. There's a pattern emerging here...&amp;nbsp;You get the picture.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;To map these parameters in the Execute SQL Task, click on the Parameter Mapping page:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:689px;HEIGHT:95px;" height=95 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_14.png" width=689&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Map parameters by clicking the Add button to add a parameter mapping. Since we have three question marks in our T-SQL, you need three parameters. The first parameter maps to the SQLServerInstanceName variable, so I select that variable from the Variable Name dropdown. I am supplying the variable to the query, so it's an Input (Direction).&amp;nbsp;It's a String data type and Strings map to the VARCHAR Data Type in the OLEDB provider I'm using in the ConnectionType property. I supply the ordinal of the parameter to which I am mapping for Parameter Name. In other words, this is the first question mark, so the Parameter Name is 0. I leave the Parameter Size set to the default (-1).&lt;/P&gt;
&lt;P&gt;Now it just so happens that all three of our question marks map to the same SSIS variable value: SQLServerInstanceName. That isn't always the case. But since it is here, I configure the remaining two parameters identically to the first, the only exception is the Parameter Name --&amp;gt; ordinal values.&lt;/P&gt;
&lt;P&gt;The T-SQL in this Execute SQL Task returns a value. If the&amp;nbsp;&lt;FONT face="Courier New"&gt;dbo&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;/FONT&gt;&lt;/FONT&gt; table does not contain&amp;nbsp;a value for the current &lt;FONT face="Courier New"&gt;SQLServerInstanceName&lt;/FONT&gt;, the current &lt;FONT face="Courier New"&gt;SQLServerInstanceName&lt;/FONT&gt;&amp;nbsp;is added.&amp;nbsp;Did you catch the Output clause in the Insert statement?&amp;nbsp;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;Output&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Id&lt;/FONT&gt;&lt;/FONT&gt; returns the value of the newly inserted Id, which is an Identity(1,1) column in the&amp;nbsp;&lt;FONT face="Courier New"&gt;dbo&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;/FONT&gt;&lt;/FONT&gt; table. The Output clause rocks. It's new in T-SQL 2005 and allows us to write a single statement to perform the insert &lt;EM&gt;and&lt;/EM&gt; return the inserted row's identity value. Note that if the&amp;nbsp;&lt;FONT face="Courier New"&gt;SQLServerInstanceName&lt;/FONT&gt;&amp;nbsp;exists in the&amp;nbsp;&lt;FONT face="Courier New"&gt;dbo&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;/FONT&gt;&lt;/FONT&gt; table, the Id for that row is returned. &lt;/P&gt;
&lt;P&gt;Either way, you get an Id value back from this statement. What do you do with it? Return to the General page of the Execute SQL Task editor and change the ResultSet Property value&amp;nbsp;from "None" to "Single row". This tells the Execute SQL Task to expect a row back from the T-SQL statement.&lt;/P&gt;
&lt;P&gt;We want to capture this Id value for later (patience! You'll see...). Now that we've told the Execute SQL Task to expect a single row from the statement's execution, click on the Result Set page to configure it.&lt;/P&gt;
&lt;P&gt;Similar to the parameters collection, single-row resultsets are a zero-based array and use ordinals to map various columns in the row to SSIS variables. Click the Add button to add a new ResultSet. Change the Result Name to 0 and select the SQLServerId variable:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:496px;HEIGHT:53px;" height=53 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_15.png" width=496&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#000000&gt;Let's review: We configured the Execute SQL Task to find or insert a &lt;FONT face="Courier New"&gt;SQLServerInstanceName&lt;/FONT&gt;&amp;nbsp;into the&amp;nbsp;&lt;FONT face="Courier New"&gt;dbo&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;/FONT&gt;&lt;/FONT&gt; table and return the Id of the row to us. We used a parameterized query for this. Why? Because it's inside a Foreach Loop Container and the&amp;nbsp;&lt;FONT face="Courier New"&gt;SQLServerInstanceName&lt;/FONT&gt; value is going to change with each iteration (pass) through the loop. We want to add them all to the &lt;FONT face="Courier New"&gt;dbo&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstances&lt;/FONT&gt;&lt;/FONT&gt; table, one at a time. Make sense? Good. We also want to store the Id value for some reason Andy won't tell us yet. Bad Andy.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The General page of the configured&amp;nbsp;Execute SQL Task looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:685px;HEIGHT:299px;" height=299 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_16.png" width=685&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Pattern Emerges...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;What we've built so far is actually the template for everything else in this package. The package is a lot more complex than this, but it will help you immensely if you realize that this piece of functionality&amp;nbsp;is merely repeated with minor tweaking to build the remainder of the package.&lt;/P&gt;
&lt;P&gt;Now. You can copy and paste a lot here if you want to. And I don't mind if you do so long as you promise to&amp;nbsp;build really good tests. You should build really good tests anyway but testing SSIS's a topic for another post. My point is simple: You can introduce a host of errors - some of them very interesting (which is another way of saying "hard to find") - cutting and pasting. So be careful.&lt;/P&gt;
&lt;P&gt;The pattern looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:275px;HEIGHT:225px;" height=225 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_17.png" width=275&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That's it really. Looks simple when you look at it this way. That's because it is simple. It just takes work to implement this in SSIS. Or in any other language or platform. Surprise! We call this "software development". &lt;img src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;FONT color=#000000&gt;&lt;/P&gt;
&lt;H4&gt;B. The Databases&lt;/H4&gt;
&lt;P&gt;Next drag another Execute SQL Task into the ForEach SQL Server Instance Loop Container. Connect the "Add the SQL Server name" Execute SQL Task to the new one using a Success precedence constraint and rename the new Execute SQL Task "Get DatabaseNames":&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:710px;HEIGHT:298px;" height=298 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_18.png" width=710&gt;&lt;/P&gt;
&lt;P&gt;Double-click the new Execute SQL Task to open the editor. Set the Connection property to the SQLServerInstance.OLEDB Connection Manager. Set the SQLStatement property to the following T-SQL statement:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Database_Id &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; master&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.databases&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'master'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'msdb'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'model'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'tempdb'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;This statement queries the master.sys.databases t&lt;FONT size=2&gt;able&amp;nbsp;for a list of databases and their&amp;nbsp;Database_Id values, explicitly excluding system databases by name. Now there are other ways to explicitly exclude system databases and you are welcome to add them to the comments for this post. I love learning new stuff - teach me something! (In Farmville, we'd say "Learn me something". We talk funny. I know.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;We do not use any parameters in this statement. It is dynamically aimed at the current instance of SQL Server by the dynamic expression we defined for the ServerName property or the SQLServerInstance.OLEDB Connection Manager. So this query will return a list of database on each SQL Server Instance identified by the "Enumerate SQL Server Instances" Script Task, as saSQLServers is shredded by the "ForEach SQL Server Instance" Loop Container, pushing new values into the SQLServerInstanceName variable, re-aiming the SQLServerInstance.OLEDB Connection Manager. Got it? Good.&lt;/P&gt;
&lt;P&gt;What to do with this list of databases... I know - let's push them into a variable. &lt;/P&gt;
&lt;P&gt;Unlike last time, we're returning a couple columns and several rows. The Single Row ResultSet simply will not do - we need a "Full result set" so set the ResultSet property of the Execute SQL Task to this value. On the Reuslt Set page, click the Add button and name the new Result 0. Select DatabaseNames from the Variable Name column:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:454px;HEIGHT:74px;" height=74 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_19.png" width=454&gt;&lt;/P&gt;
&lt;P&gt;So now, the list of database names and IDs are going to be pushed into the DatabaseNames object variable.&lt;/P&gt;
&lt;P&gt;Object variables are cool. You can use them for anything. They are like Variants in old VB. They hold&amp;nbsp;scalars or collections, or collections of collections. In this case we're pushing a full ADO.Net Dataset into the DatabaseNames object variable. &lt;/P&gt;
&lt;P&gt;How cool is that?&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A-Shreddin' We Will Go&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Next drag a Foreach Loop Container &lt;EM&gt;into&lt;/EM&gt; the "ForEach SQL Server Instance" Loop Container. Connect the Get DatabaseNames Execute SQL Task to the new Foreach Loop Container using a Success precedence constraint and rename the new Foreach Loop Container "Foreach Database".&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Double-click the Foreach Database Loop Container and navigate to the Collection page. Select the Foreach ADO Enumerator and the DatabaseNames variable&amp;nbsp;in the "ADO object source variable" dropdown. ADO.Net datasets can hold multpile tables but ours only has one table, so accept the default Enumeration mode of "Rows in the first table":&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:564px;HEIGHT:341px;" height=341 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_20.png" width=564&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Variable Mappings page and add a couple variable mappings. &lt;/P&gt;
&lt;P&gt;Remember: the DatabaseNames object variable contains an ADO.Net&amp;nbsp;dataset that has one DataTable. That table is populated with the results of the T-SQL query in the "Get DatabaseNames" Execute SQL Task. The T-SQL shaped the DataTable contained inside the DatabaseNames variable. That query had two columns in the Select clause. We map the data in the DatabaseNames variable to scalar SSIS variables using the ordinal of the columns in that T-SQL Select clause. Since it read &lt;FONT face="Courier New"&gt;select&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Database_Id&lt;/FONT&gt;&lt;/FONT&gt;, we map &lt;FONT face="Courier New" color=#0000ff&gt;name&lt;/FONT&gt; to the DatabaseName SSIS variable using ordinal 0&amp;nbsp;and&amp;nbsp;&lt;FONT face="Courier New"&gt;Database_Id&lt;/FONT&gt; to the DatabaseObjectId SSIS variable using ordinal 1. Make sense? Good.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:392px;HEIGHT:103px;" height=103 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_21.png" width=392&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Click the Ok button to close the Foreach Loop Container editor.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Let's look at what we have here. Once we've established a connection to a particular instance of SQL Server, we query the master database for a list of database names and Ids. We then shred that list in a nested Foreach Loop Container.&lt;/P&gt;
&lt;P&gt;Before we move on, we need to add some more dynamic functionality to our SQLServerInstance.OLEDB Connection Manager. So right click the SQLServerInstance.OLEDB Connection Manager and select Properties. Click the Expressions property and then click the ellipsis in the Value textbox. When the Property Expressions Editor displays select InitialCatalog in the Property dropdown. Click the ellipsis in the Expression textbox:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:446px;HEIGHT:350px;" height=350 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_32.png" width=446&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the Expression Builder, add the DatabaseName&amp;nbsp;variable to the Expression:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:583px;HEIGHT:518px;" height=518 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_33.png" width=583&gt;&lt;/P&gt;
&lt;P&gt;This makes the SQLServerInstance.OLEDB Connection Manager even more dynamic. It now is aimed at individual databases as the Foreach Database Loope Container iterates.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Show Me The Databases!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task into the Foreach Database Loop Container. Rename it "Show Database Name" and double-click to open the editor. On the Script page add the SQLServerInstanceName, DatabaseName, DatabaseObjectId variables to the ReadOnlyVariables property:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:696px;HEIGHT:119px;" height=119 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_22.png" width=696&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Click the Design Script button and add the following code to Sub Main():&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQLServerInstanceName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sDatabaseName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iDatabaseObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL Server Instance Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQLServerInstanceName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Database Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sDatabaseName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Database Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iDatabaseObjectId.ToString&lt;BR&gt;&lt;BR&gt;MsgBox(sMsg)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Close the VSA editor and click the Ok button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;This script builds a string containing the values of the SQLServerInstanceName, DatabaseName, and DatabaseObjectId variables; then displays them in a message box:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:286px;HEIGHT:182px;" height=182 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_23.png" width=286&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Store The Database Metadata&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task&amp;nbsp;into the Foreach Database Loop Container. Connect the Show Database Name Script Task to it using a Success precedence constraint and rename the Execute SQL Task "Add the Database Name". Double-click it to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Single row&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Connection: EnterpriseDBMetadata.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;If&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DatabaseName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Databases&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; DatabaseName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SQLServerInstancesTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Insert&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Into&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Databases&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;DatabaseObjectId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SQLServerInstancesTableId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;DatabaseName&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; output&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Values&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&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;&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;Else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Databases&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DatabaseName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SQLServerInstancesTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There are a few more parameters this time. Map them as shown in the following list and image:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseName, Input, VARCHAR, 0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SQLServerId, Input, LONG, 1&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseObjectId, Input, LONG, 2&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SQLServerId, Input, LONG, 3&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseName, Input, VARCHAR, 4&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseName, Input, VARCHAR, 5&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SQLServerId, Input, LONG, 6&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG style="WIDTH:652px;HEIGHT:203px;" height=203 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_24.png" width=652&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the Result Set page and add a new resultset. Set the Result Name to 0 and assign the result to the variable DatabaseId:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:375px;HEIGHT:68px;" height=68 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_25.png" width=375&gt;&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;Is it starting to come together now? Can you see where we're headed? Do you smell what Andy's cooking? &lt;img src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;H4&gt;C. The Schemas&amp;nbsp;&lt;/H4&gt;
&lt;P&gt;Add another Execute SQL Task to the Foreach Database Loop Container and rename it "Get SchemaNames". Add a Success precedence constraint from the "Add the Database Name" Execute SQL Task to the Get SchemaNames Execute SQL Task, and double-click Get SchemaNames to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Full result set&lt;/LI&gt;
&lt;LI&gt;Connection: SQLServerInstance.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;Schema_Id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.schemas&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; 16384&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'guest'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'INFORMATION_SCHEMA'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;'sys'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This statement&amp;nbsp;returns dbo and user schemas and their respective Ids.&lt;/P&gt;
&lt;P&gt;Configure the Result Set page with the following resultset properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Result Name: 0&lt;/LI&gt;
&lt;LI&gt;Variable Name: SchemaNames&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Shred The Schemas&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a new&amp;nbsp;Foreach Loop Container into the Foreach Database Loop Container and rename it "Foreach Schema". Connect the "Get SchemaNames" Execute SQL Task to it using a Success precedence constraint. Double-click Foreach Schema to open the editor and set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Collection page, Enumerator: Foreach ADO Enumerator&lt;/LI&gt;
&lt;LI&gt;Collection page, Ado object source variable: SchemaNames&lt;/LI&gt;
&lt;LI&gt;Collection page, Enumeration mode: Rows in first table&lt;/LI&gt;
&lt;LI&gt;Variable Mappings&amp;nbsp;page&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Variable: SchemaName; Index: 0&lt;/LI&gt;
&lt;LI&gt;Variable: SchemaObjectId; Index: 1&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Foreach Loop Container editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Show Me The Schemas!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task into the Foreach Schema Loop Container and rename it "Show Schema Name". Double-click to open the editor and add the following SSIS variables to the ReadOnlyVariables property: SQLServerInstanceName, DatabaseName, DatabaseObjectId, SchemaName, SchemaObjectId. Click the Design Script button to open the VSA editor and add the following code to Sub Main():&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;=Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQLServerInstanceName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sDatabaseName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iDatabaseObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSchemaName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iSchemaObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL Server Instance Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQLServerInstanceName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Database Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sDatabaseName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Database Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iDatabaseObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Schema Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSchemaName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 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; "Schema Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iSchemaObjectId.ToString&lt;BR&gt;&lt;BR&gt;MsgBox(sMsg)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;Close the&amp;nbsp;VSA editor and click the Ok button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Store Schema Metadata&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the Foreach Schema Loop Container and connect the "Show Schema Name" Script Task to it using a Success precedence constraint. Rename the Execute SQL Task "Add the&amp;nbsp;Schema Name" and double-click it to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Single row&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Connection: EnterpriseDBMetadata.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;If&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SchemaName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; SchemaName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DatabasesTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Insert&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Into&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SchemaObjectId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;DatabasesTableId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SchemaName&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; output&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Values&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&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;&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;Else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Schemas&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SchemaName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; DatabasesTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Map the&amp;nbsp;parameters as shown in the following list and image:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaName, Input, VARCHAR, 0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseId, Input, LONG, 1&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaObjectId, Input, LONG, 2&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseId, Input, LONG, 3&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaName, Input, VARCHAR, 4&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaName, Input, VARCHAR, 5&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseId, Input, LONG, 6&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG style="WIDTH:655px;HEIGHT:183px;" height=183 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_26.png" width=655&gt;&lt;/P&gt;
&lt;P&gt;Click the Result Set page and add a new resultset. Set the Result Name to 0 and assign the result to the variable SchemaId:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:359px;HEIGHT:48px;" height=48 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_27.png" width=359&gt;&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;H4&gt;D. The Tables and Views&lt;/H4&gt;
&lt;P&gt;Add another Execute SQL Task to the Foreach&amp;nbsp;Schema Loop Container and rename it "Get Table and View Names". Add a&amp;nbsp;&lt;BR&gt;Success precedence constraint from the "Add the&amp;nbsp;Schema Name" Execute SQL Task to the "Get Table and View Names" Execute SQL Task, and double-click Get SchemaNames to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Full result set&lt;/LI&gt;
&lt;LI&gt;Connection: SQLServerInstance.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;Object_Id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; type_desc&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;union&lt;BR&gt;select&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;Object_Id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; type_desc&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.views&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;schema_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ?&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This statement&amp;nbsp;returns tables and views, their respective Ids, and type descriptions (table or view).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Map the following parameters:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SchemaObjectId, Input, LONG, 0, -1&lt;/LI&gt;
&lt;LI&gt;SchemaObjectId, Input, LONG, 1, -1&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Configure the Result Set page with the following resultset properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Result Name: 0&lt;/LI&gt;
&lt;LI&gt;Variable Name: TablesAndViewsNames&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Shred The Tables and Views&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a new&amp;nbsp;Foreach Loop Container into the Foreach&amp;nbsp;Schema Loop Container and rename it "Foreach Table and View". Connect the "Get Table and View Names" Execute SQL Task to it using a Success precedence constraint. Double-click Foreach&amp;nbsp;Table and View&amp;nbsp;to open the editor and set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Collection page, Enumerator: Foreach ADO Enumerator&lt;/LI&gt;
&lt;LI&gt;Collection page, Ado object source variable: TableAndViewsNames&lt;/LI&gt;
&lt;LI&gt;Collection page, Enumeration mode: Rows in first table&lt;/LI&gt;
&lt;LI&gt;Variable Mappings&amp;nbsp;page&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Variable: TableAndViewsName; Index: 0&lt;/LI&gt;
&lt;LI&gt;Variable: TableAndViewsObjectId; Index: 1&lt;/LI&gt;
&lt;LI&gt;Variable: TableAndViewsType; Index: 2&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Foreach Loop Container editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Show Me The Table And Views!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task into the Foreach&amp;nbsp;Table and View&amp;nbsp;Loop Container and rename it "Show Table and View Name". Double-click to open the editor and add the following SSIS variables to the ReadOnlyVariables property: SQLServerInstanceName, DatabaseName, DatabaseObjectId, SchemaName, SchemaObjectId, TablesAndViewsName, TablesAndViewsObjectId, TablesAndViewsType. Click the Design Script button to open the VSA editor and add the following code to Sub Main():&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQLServerInstanceName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sDatabaseName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iDatabaseObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSchemaName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iSchemaObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sTableAndViewName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iTableAndViewObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sTableAndViewType &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsType"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL Server Instance Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQLServerInstanceName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Database Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sDatabaseName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Database Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iDatabaseObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Schema Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSchemaName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Schema Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iSchemaObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sTableAndViewName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iTableAndViewObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Type: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sTableAndViewType&lt;BR&gt;MsgBox(sMsg)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Close the&amp;nbsp;VSA editor and click the Ok button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Store&amp;nbsp;Tables And Views&amp;nbsp;Metadata&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the Foreach&amp;nbsp;Tables and Views Loop Container and connect the "Show&amp;nbsp;Table and View&amp;nbsp;Name" Script Task to it using a Success precedence constraint. Rename the Execute SQL Task "Add the&amp;nbsp;Table and View Name" and double-click it to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Single row&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Connection: EnterpriseDBMetadata.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;If&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ObjectName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;TablesAndViews&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; ObjectName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;FONT color=#808080&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; and&lt;/FONT&gt;&lt;FONT size=2&gt; ObjectType &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SchemasTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Insert&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Into&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;TablesAndViews&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;TablesAndViewsObjectId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SchemasTableId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ObjectName&lt;BR&gt;&amp;nbsp; &lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ObjectType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; output&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; inserted&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Values&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&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;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;BR&gt;Else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;TablesAndViews&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ObjectName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/FONT&gt;&lt;FONT size=2&gt; ObjectType &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; &amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; SchemasTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Map the&amp;nbsp;parameters as shown in the following list and image:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsName, Input, VARCHAR, 0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsType, Input, VARCHAR, 1&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaId, Input, LONG, 2&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsObjectId, Input, LONG, 3&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;SchemaId, Input, LONG, 4&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsName, Input, VARCHAR, 5&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsType, Input, VARCHAR, 6&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsName, Input, VARCHAR, 7&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsType, Input, VARCHAR, 8&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;DatabaseId, Input, LONG, 9&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG style="WIDTH:670px;HEIGHT:251px;" height=251 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_28.png" width=670&gt;&lt;/P&gt;
&lt;P&gt;Click the Result Set page and add a new resultset. Set the Result Name to 0 and assign the result to the variable TablesAndViewsId:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:380px;HEIGHT:67px;" height=67 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_29.png" width=380&gt;&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;H4&gt;E. The Tables and Views&lt;/H4&gt;
&lt;P&gt;Add another Execute SQL Task to the Foreach&amp;nbsp;Table and View&amp;nbsp;Loop Container and rename it "Get Column Names and Metadata". Add a Success precedence constraint from the "Add the&amp;nbsp;Table and View&amp;nbsp;Name" Execute SQL Task to the "Get Column Names and Metadata" Execute SQL Task, and double-click "Get&amp;nbsp;Column Names and Metadata" to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Full result set&lt;/LI&gt;
&lt;LI&gt;Connection: SQLServerInstance.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;distinct&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;column_id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.columns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; c&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;inner&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;join&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;sys.types&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;user_type_id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;user_type_id&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; c&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;object_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; ?&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This statement&amp;nbsp;returns columns, their respective Ids, and type names.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Map the following parameters:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;TablesAndViewsObjectId, Input, LONG, 0, -1&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Configure the Result Set page with the following resultset properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Result Name: 0&lt;/LI&gt;
&lt;LI&gt;Variable Name: ColumnNames&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Shred The Columns&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a new&amp;nbsp;Foreach Loop Container into the Foreach&amp;nbsp;Table and View&amp;nbsp;Loop Container and rename it "Foreach Column". Connect the "Get Column Names and Metadata" Execute SQL Task to it using a Success precedence constraint. Double-click Foreach&amp;nbsp;Column to open the editor and set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Collection page, Enumerator: Foreach ADO Enumerator&lt;/LI&gt;
&lt;LI&gt;Collection page, Ado object source variable: ColumnNames&lt;/LI&gt;
&lt;LI&gt;Collection page, Enumeration mode: Rows in first table&lt;/LI&gt;
&lt;LI&gt;Variable Mappings&amp;nbsp;page&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Variable: ColumnName; Index: 0&lt;/LI&gt;
&lt;LI&gt;Variable: ColumnObjectId; Index: 1&lt;/LI&gt;
&lt;LI&gt;Variable: ColumnDataType; Index: 2&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;Click the Ok button to close the Foreach Loop Container editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Show Me The Columns!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag a Script Task into the Foreach&amp;nbsp;Column Loop Container and rename it "Show&amp;nbsp;Column Name". Double-click to open the editor and add the following SSIS variables to the ReadOnlyVariables property: SQLServerInstanceName, DatabaseName, DatabaseObjectId, SchemaName, SchemaObjectId, TablesAndViewsName, TablesAndViewsObjectId, TablesAndViewsType, ColumnName, ColumnObjectId, ColumnDataType. Click the Design Script button to open the VSA editor and add the following code to Sub Main():&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSQLServerInstanceName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQLServerInstanceName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sDatabaseName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iDatabaseObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"DatabaseObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sSchemaName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iSchemaObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SchemaObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sTableAndViewName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iTableAndViewObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variable&lt;BR&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sTableAndViewType &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"TablesAndViewsType"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sColumnName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ColumnName"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; iColumnObjectId &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Convert.ToInt32(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ColumnObjectId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sColumnDataType &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"ColumnDataType"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;Dim&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sMsg &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"SQL Server Instance Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSQLServerInstanceName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Database Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sDatabaseName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Database Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iDatabaseObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Schema Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sSchemaName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Schema Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iSchemaObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sTableAndViewName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iTableAndViewObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Table / View Type: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sTableAndViewType &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Column Name: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sColumnName &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Column Id: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; iColumnObjectId.ToString &amp;amp; vbCrLf &amp;amp; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"Column DataType: "&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp; sColumnDataType&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;MsgBox(sMsg)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Close the&amp;nbsp;VSA editor and click the Ok button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Store&amp;nbsp;Columns And&amp;nbsp;Metadata&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the Foreach&amp;nbsp;Column Loop Container and connect the "Show&amp;nbsp;Column&amp;nbsp;Name" Script Task to it using a Success precedence constraint. Rename the Execute SQL Task "Add the&amp;nbsp;Column Name" and double-click it to open the editor. Set the following properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ResultSet: Single row&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Connection: EnterpriseDBMetadata.OLEDB&lt;/LI&gt;
&lt;LI&gt;SQLStatement: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;If&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Not&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;Exists(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ColumnName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&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&gt;&lt;FONT size=2&gt; ColumnName &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&amp;nbsp; and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; TablesAndViewsTableId &lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;begin&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Insert&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Into&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dbo&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ColumnsObjectId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;TablesAndViewsTableId&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp; ,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ColumnName&lt;BR&gt;&amp;nbsp; &lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ColumnDataType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Values&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&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;&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;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;end&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Map the&amp;nbsp;parameters as shown in the following list and image:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;ColumnName, Input, VARCHAR, 0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsId, Input, LONG, 1&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;ColumnObjectId, Input, LONG, 2&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;TablesAndViewsId, Input, LONG, 3&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;ColumnName, Input, VARCHAR, 4&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;ColumnDataType, Input, VARCHAR, 5&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG style="WIDTH:635px;HEIGHT:158px;" height=158 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_30.png" width=635&gt;&lt;/P&gt;
&lt;P&gt;Click the Ok button to close the Execute SQL Task editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You're done!&lt;/P&gt;
&lt;P&gt;When you're done your SSIS package should look something like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:608px;HEIGHT:1614px;" height=1614 src="http://vsteamsystemcentral.com/images/ext/EntDBMetadata_31.png" width=608&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can get the SSIS package &lt;A class="" href="http://vsteamsystemcentral.com/dnn/Articles/EnterpriseDBMetadata/tabid/116/Default.aspx" target=_blank&gt;here&lt;/A&gt;&amp;nbsp;(free registration required).&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=284" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Design+Patterns/default.aspx">Design Patterns</category></item><item><title>New SSIS 101 Article!</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/08/21/new-ssis-101-article.aspx</link><pubDate>Thu, 21 Aug 2008 21:23:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:277</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/277.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=277</wfw:commentRss><description>&lt;P&gt;My latest SSIS 101 article - &lt;A class="" href="http://www.sqlservercentral.com/articles/SSIS/64014/" target=_blank&gt;SSIS 101: Object Variables, ResultSets, and Foreach Loop Containers&lt;/A&gt; - is live at &lt;A class="" href="http://www.sqlservercentral.com/" target=_blank&gt;SQL Server Central&lt;/A&gt; today!&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=277" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category></item><item><title>Installing Visual Studio 2008 SP1 Beta</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/07/15/installing-visual-studio-2008-sp1-beta.aspx</link><pubDate>Tue, 15 Jul 2008 13:41:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:248</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/248.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=248</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cf99c752-1391-4bc3-babc-86bc0b9e8e5a&amp;amp;DisplayLang=en" target=_blank&gt;Visual Studio 2008 Service Pack 1 Beta&lt;/A&gt; is available. Installation&amp;nbsp;is not straightforward - there is at least one "gotcha." &lt;/P&gt;
&lt;P&gt;Full SP documentation can be found &lt;A class="" href="http://vs2008sp1docs.msdn.microsoft.com/en-us/default.aspx" target=_blank&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Procedure&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Download &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cf99c752-1391-4bc3-babc-86bc0b9e8e5a&amp;amp;DisplayLang=en" target=_blank&gt;Visual Studio 2008 Service Pack 1 Beta&lt;/A&gt;. I am installing this on the same virtual machine I installed SQL Server 2008 RC0 - details in this &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/07/14/installing-sql-server-rc0.aspx" target=_blank&gt;post&lt;/A&gt;. I also plan to install the Visual Studio 2008 GDR June CTP on this virtual machine (which will be covered in &lt;A class="" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/07/15/installing-visual-studio-2008-database-edition-gdr-june-ctp.aspx" target=_blank&gt;this post&lt;/A&gt;) - hence the GDRsetup.exe included in the screenshot. &lt;/P&gt;
&lt;P&gt;I execute the VS90sp1-KB945140-ENU.exe file&amp;nbsp;with Administrator privileges by right-clicking it ans selecting "Run as administrator" :&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP100.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;This starts the installation wizard. Components are listed in the "Affected products" listbox on the introductory splash page:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP101.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Click Next to proceed to the License page:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP102.png"&gt;&lt;/P&gt;
&lt;P&gt;If you read and accept the License terms, click Next to proceed to the Installation Progress page:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP103.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Oops&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I install Visual Studio 2008 SP1 Beta - following the instruction - the installation fails. This is the "gotcha" I mentioned in the introduction:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP104.png"&gt;&lt;/P&gt;
&lt;P&gt;If you click the link in the sentence "View the log file," the installation log is displayed. I copied the error message at the end of this file. The error message is "A later version of Microsoft SQL Server Compact is already installed" :&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP105.png"&gt;&lt;/P&gt;
&lt;P&gt;I copy this error to the clipboard and paste it into&amp;nbsp;a search engine. I receive one &lt;A class="" href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3519444&amp;amp;SiteID=1" target=_blank&gt;link&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP106.png"&gt;&lt;/P&gt;
&lt;P&gt;Browsing to that &lt;A class="" href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3519444&amp;amp;SiteID=1" target=_blank&gt;link&lt;/A&gt; and scrolling down, I find an answer (thanks Vicente!):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP108.png"&gt;&lt;/P&gt;
&lt;P&gt;Following Vicente's instructions (and link), I download&amp;nbsp;SSCERuntime-ENU.msi from the &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=68539FAE-CF03-4C3B-AEDA-769CC205FE5F&amp;amp;displaylang=en" target=_blank&gt;Microsoft SQL Server Compact 3.5 SP1 Beta website&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP110.png"&gt;&lt;/P&gt;
&lt;P&gt;I save this file in my Apps directory:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP111.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP112.png"&gt;&lt;/P&gt;
&lt;P&gt;I install SSCERuntime-ENU.msi from my Apps directory:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP113.png"&gt;&lt;/P&gt;
&lt;P&gt;When the Microsoft SQL Server Compact 3.5 SP1 Beta installation wizard starts, click Next:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP114.png"&gt;&lt;/P&gt;
&lt;P&gt;At the Program Maintenance page, select Remove and click Next:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP115.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Remove button to remove the current version of the SQL Server CE Runtime:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP116.png"&gt;&lt;/P&gt;
&lt;P&gt;When the SQL Server CE Runtime is removed, click Finish:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP117.png"&gt;&lt;/P&gt;
&lt;P&gt;Return to your folder containing the downloaded SSCERuntime-ENU.msi file and copy that file to the clipboard:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP118.png"&gt;&lt;/P&gt;
&lt;P&gt;Navigate to the &lt;STRONG&gt;&lt;EM&gt;temporary directory&lt;/EM&gt;&lt;/STRONG&gt; containing the Visual Studio 2008 SP1 files. For my virtual machine, this path is &lt;EM&gt;C:\Users\Administrator\AppData\Local\Temp\1\Microsoft Visual Studio 2008 SP1 (Beta)&lt;/EM&gt;. Paste SSCERuntime-ENU.msi, overwriting the existing file:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP119.png"&gt;&lt;/P&gt;
&lt;P&gt;Again, overwrite the existing file:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP120.png"&gt;&lt;/P&gt;
&lt;P&gt;Return to your folder containing the Visual Studio 2008 SP1 Beta file (VS90sp1-KB945140-ENU.exe) and execute this file with administrator permissions (again):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP121.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Next to start the installation (again):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP122.png"&gt;&lt;/P&gt;
&lt;P&gt;Agree to the license (again):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP123.png"&gt;&lt;/P&gt;
&lt;P&gt;Observe the Progress (again):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP124.png"&gt;&lt;/P&gt;
&lt;P&gt;This time, the service pack is applied - without error!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/InstSP125.png"&gt;&lt;/P&gt;
&lt;P&gt;I may be missing something&amp;nbsp;- this is how the installation went for me. I do not believe the temporary file we overwrite in the corrective steps &lt;EM&gt;exist&lt;/EM&gt; until the first installation attempt fails.&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=248" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Database+Edition/default.aspx">Database Edition</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Service+Pack+1/default.aspx">Service Pack 1</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category></item><item><title>Installing SQL Server RC0</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/07/14/installing-sql-server-rc0.aspx</link><pubDate>Mon, 14 Jul 2008 18:29:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:247</guid><dc:creator>andy</dc:creator><slash:comments>1</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/247.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=247</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=35F53843-03F7-4ED5-8142-24A4C024CA05&amp;amp;displaylang=en" target=_blank&gt;SQL Server 2008 RC0&lt;/A&gt; has been out for a while. You can download it &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=35F53843-03F7-4ED5-8142-24A4C024CA05&amp;amp;displaylang=en" target=_blank&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;This post is not a detailed examination of the setup options. There are much better articles and posts out there if you want more information. This post represents one way to get SQL Server 2008 RC0 up and running so you can start learning the new features!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Getting Started&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I downloaded the software and installed it on a brand new virtual machine running &lt;A class="" href="http://www.microsoft.com/windowsserver2008/en/us/default.aspx" target=_blank&gt;Windows Server 2008 Enterprise&lt;/A&gt; (without Hyper-V). I used &lt;A class="" href="http://vmware.com/products/ws/" target=_blank&gt;VMWare Workstation&lt;/A&gt; for this virtual machine because I need a 64-bit guest OS. I was also able to configure the machine to use both CPUs on my host system. This may be possible with &lt;A class="" href="http://www.microsoft.com/windowsserversystem/virtualserver/default.aspx" target=_blank&gt;Virtual Server&lt;/A&gt; or &lt;A class="" href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target=_blank&gt;Virtual PC&lt;/A&gt;, but I don't know how to do it (if it is).&lt;/P&gt;
&lt;P&gt;I loaded the ISO image for SQL Server 2008 RC0 64-bit into the virtual DVD drive and started the setup application. The following screen displays:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst00.png"&gt;&lt;/P&gt;
&lt;P&gt;Now this looks a lot different from previous SQL Server installation applications. In general, you navigate between pages using the Page&amp;nbsp;List on the left. To continue installing click the Installation link in the Page List:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst01.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Installing a Stand-Alone Default Instance&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To install a new instance of SQL Server 2008, click the "New SQL Server stand-alone installation or add features to an existing installation" link. The Setup Support Rules wizard executes and checks your system configuration:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst02.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Green checkmarks == good. When you click OK the Product Key screen displays. On this screen you can select any of the available evaluation editions or enter a product key:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst03.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Next to continue. The License Terms page is next. Accept the license terms and click Next to proceed:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst04.png"&gt;&lt;/P&gt;
&lt;P&gt;The Setup Support Files page displays next. Click Install to begin application setup:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst05.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The first step in setting up the application is checking the Setup Support Rules:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst06.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;On this execution, the Setup Support Rules detected Windows Firewall and issued the following warning:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst07.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I will address this warning after setup is complete. The next page is Feature Selection. Select the SQL Server 2008&amp;nbsp;features you wish to install and their respective directories, then click the Next button:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst08.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;The Instance Configuration page allows you to specify the SQL Server instance name and root directory:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst09.png"&gt;&lt;/P&gt;
&lt;P&gt;Next, disk space is checked. Click Next to proceed:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst10.png"&gt;&lt;/P&gt;
&lt;P&gt;Before configuring the Server, I created a SQL Server service account. Right-click My Computer and select Manage:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst11.png"&gt;&lt;/P&gt;
&lt;P&gt;Navigate to Server Manager \ Configuration \ Local Users and Groups \ Users. Right-click in the Users pane and select New User:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst12.png"&gt;&lt;/P&gt;
&lt;P&gt;I named my service account SQLDude:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst14.png"&gt;&lt;/P&gt;
&lt;P&gt;Returning to the Server Configuration page of the SQL Server 2008 RC0 installation application, I click the "Use the same account for all SQL Server services" button and supply the credentials for SQLDude:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst15.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click OK to assign the credentials to all services:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst16.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click Next to proceed to the Database Engine Configuration page. On this page, configure administrator accounts, data directories, and the filestream options:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst17.png"&gt;&lt;/P&gt;
&lt;P&gt;On the Data Directories tab, set a data root directory and edit any associated default paths:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst19.png"&gt;&lt;/P&gt;
&lt;P&gt;I enabled filestream on the FILESTREAM tab. I haven't tested this yet.&amp;nbsp;Configuring&amp;nbsp;Filestream&amp;nbsp;did not work in the CTPs (this was one the bugs I reported):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst20.png"&gt;&lt;/P&gt;
&lt;P&gt;The next page is Analysis Services Configuration. Select administrators and data directories for SSAS 2008:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst21.png"&gt;&lt;/P&gt;
&lt;P&gt;Reporting Services Configuration is the next page. I installed the native mode default configuration:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst22.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Next to set Error and Usage Reporting options on the next page:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst23.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Next to execute the Installation Rules. If there are no errors or warnings, click Next to proceed. Otherwise, stop here and address them:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst24.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Next to navigate to the Ready to Install page. Review the summary and click Back to make any changes. Click Install to install SQL Server 2008 RC0:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst25.png"&gt;&lt;/P&gt;
&lt;P&gt;Once the installation completes the Next button will enable. Review the Status to make sure all items are marked Success and click Next to complete the installation:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst27.png"&gt;&lt;/P&gt;
&lt;P&gt;Click Close on the Complete page to unload the SQL Server 2008 RC0 installation application:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/RC0Inst28.png"&gt;&lt;/P&gt;
&lt;P&gt;That's it! You've successfully installed SQL Server 2008 RC0 - congratulations!&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=247" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Installation/default.aspx">Installation</category></item><item><title>MVP Renewed!</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/04/01/mvp-renewed.aspx</link><pubDate>Tue, 01 Apr 2008 21:53:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:178</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/178.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=178</wfw:commentRss><description>&lt;P&gt;I received the news today: Microsoft has awarded me SQL Server MVP again this year. How cool!&lt;/P&gt;
&lt;P&gt;Thanks Microsoft!&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=178" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>Power Tools for Visual Studio Team System 2008 Database Edition</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/02/15/power-tools-for-visual-studio-team-system-2008-database-edition.aspx</link><pubDate>Fri, 15 Feb 2008 07:08:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:158</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/158.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=158</wfw:commentRss><description>&lt;P&gt;Gert and team announce the availability of &lt;A class="" href="http://blogs.msdn.com/gertd/archive/2008/02/14/visual-studio-team-system-2008-database-edition-power-tools.aspx" target=_blank&gt;Power Tools for Visual Studio Team System 2008 Database Edition&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;Cool new stuff includes a couple new test conditions, file- and XML-based data generators, and (my favorite) SQL Static Code Analysis integrated into MSBuild / Team Build!&lt;/P&gt;
&lt;P&gt;Download page:&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=73ba5038-8e37-4c8e-812b-db14ede2c354&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=73ba5038-8e37-4c8e-812b-db14ede2c354&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Installer download:&lt;BR&gt;&lt;A href="http://download.microsoft.com/download/f/b/8/fb8d1c0d-c0c4-4004-ab86-12396b2a3ee3/VSTSDB2008PT.msi"&gt;http://download.microsoft.com/download/f/b/8/fb8d1c0d-c0c4-4004-ab86-12396b2a3ee3/VSTSDB2008PT.msi&lt;/A&gt; 
&lt;P&gt;Documentation download:&lt;BR&gt;&lt;A href="http://download.microsoft.com/download/f/b/8/fb8d1c0d-c0c4-4004-ab86-12396b2a3ee3/Power%20Tools%202008.doc"&gt;http://download.microsoft.com/download/f/b/8/fb8d1c0d-c0c4-4004-ab86-12396b2a3ee3/Power%20Tools%202008.doc&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Great work Team!&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=158" width="1" height="1"&gt;</description></item><item><title>Introducing Change Data Capture, SSIS, and SQL Server 2008 CTP5 (Nov 2007)</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2008/02/09/change-data-capture-ssis-and-sql-server-2008-ctp5-nov-2007.aspx</link><pubDate>Sat, 09 Feb 2008 02:01:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:148</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/148.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=148</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;On&amp;nbsp;Thursday, 24 Jan 2008, I presented New Features In SSIS 2008 to the &lt;A class="" href="http://richmondsql.org/" target=_blank&gt;Richmond SQL Server Users Group&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Most of the presentation was dedicated to demonstrating Change Data Capture (CDC)&amp;nbsp;interacting with SQL Server 2008 Integration Services. I started seriously working on this demo the first week of January, thinking I'd put 2 - 6 hours into it to get it running&amp;nbsp;using the detailed instructions in Books Online. Things were going relatively well working through the demo until I hit calls from SSIS to table-valued functions created by CDC.&lt;/P&gt;
&lt;P&gt;The TVFs didn't exist.&amp;nbsp;&lt;img src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-8.gif" alt="Indifferent" /&gt;&lt;/P&gt;
&lt;P&gt;Well, that's not exactly true. Their renamed stubs exist in CTP5, but they only return 0. Bummer.&amp;nbsp;Or is it? This is what's cool about CTPs - you get a feel for where the development is and where it will likely go. And&amp;nbsp;while working through some other stuff related to CDC I'd learned enough to cobble together a solution, so I did. What I built will demonstrate the &lt;EM&gt;principles&lt;/EM&gt; of CDC. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;lt;As_Is&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I assure you there will be differences in the RTM and would wager good money this post will be obsolete with CTP6. So if I get any questions / comments the &lt;EM&gt;first&lt;/EM&gt; thing I will ask is "Which CTP are you using?" If it's not CTP5 this post is not appropriate. &lt;BR&gt;&amp;lt;/As_Is&amp;gt;&lt;/P&gt;
&lt;P&gt;You can build your own virtual server or PC and play along, or you can download a prebuilt virtual hard drive (vhd) file &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6a39affa-db6e-48a9-82e4-4efd6705f4a6&amp;amp;DisplayLang=en" target=_blank&gt;here&lt;/A&gt;. I built my own. Once I got the&amp;nbsp;SQL Server 2008 November CTP up and running I logged in and began tinkering. Here's what I did and what I learned:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Introducing CDC 101&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The idea of Change Data Capture is pretty cool. The data is stored in a format similar to that used by some database engine transaction logs. In a transaction log changes are respresented in row-based &lt;EM&gt;before-&lt;/EM&gt;&amp;nbsp;and &lt;EM&gt;after&lt;/EM&gt;-images Inserts have empty before-images and the inserted data in the after-image. This makes sense because there's no data there before, only after the insert. Deletes have deleted data in the before-image and empty after-images.&amp;nbsp;Updates have the existing row (or affected columns in the row) in the before-image and the updated row (or affected columns in the row) in the after-image. &lt;/P&gt;
&lt;P&gt;In SQL Server 2008's implementation of CDC, changes are stored in a table. The table is created in a special schema named "cdc" built in the database when you enable Change Data Capture. I had a cynical thought: I wonder if the Center for Disease Control uses SQL Server... &lt;img src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;A table in the cdc schema&amp;nbsp;is created for each table for which Change Tracking is enabled.&amp;nbsp;The table is named cdc.&lt;EM&gt;schema&lt;/EM&gt;_&lt;EM&gt;table&lt;/EM&gt;_CT and&amp;nbsp;contains a column for each column in the Tracked table plus metadata columns. In my example I enabled Chage Tracking on a table named dbo.Contact. The table created in the cdc schema is cdc.dbo_Contact_CT. &lt;/P&gt;
&lt;P&gt;One of the metadata columns is __$operation and it identifies the record (image) type. Inserts and Deletes have no empty images. Deletes are respresented in the&amp;nbsp;row by an __$operation column value of 1;&amp;nbsp;Inserts by an __$operation column value of 2. The before-image of an Update in the&amp;nbsp;row by an __$operation column value of 3; the after-image by an __$operation column value of 4.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Setting It Up&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I'm going to demonstrate using Change Data Capture to develop ETL with SSIS 2008. I started with the &lt;SPAN id=nsrTitle&gt;Improving Incremental Loads with Change Data Capture - accessible from Change Data Capture In Integration Services -&lt;/SPAN&gt;&amp;nbsp;topic in SQL Server 2008 CTP5 Books Online (ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10is_1devconc/html/c4aaba1b-73e5-4187-a97b-61c10069cc5a.htm).&lt;/P&gt;
&lt;P&gt;I first create two databases: CDCSource and CDCTarget. I use the following script:&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&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=#008000 size=2&gt;-- create CDCSource database...&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;from&lt;/FONT&gt;&lt;FONT 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;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;'CDCSource'&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; CDCSource&lt;BR&gt;go&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;use&lt;/FONT&gt;&lt;FONT size=2&gt; CDCSource&lt;BR&gt;go&lt;BR&gt;&lt;FONT color=#008000 size=2&gt;&lt;BR&gt;-- create CDCTarget database...&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;from&lt;/FONT&gt;&lt;FONT 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;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;'CDCTarget'&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; CDCTarget&lt;BR&gt;go&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;Next I create a table in each database to serve as my ETL source and destination. I use a portion of the AdventureWorks Person.Contact 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; CDCTarget&lt;BR&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create and populate dbo.Contact 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;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;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;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;'Contact'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&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;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;BR&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; ContactID&lt;BR&gt;&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;Title&lt;BR&gt;&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;MiddleName&lt;BR&gt;&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;Suffix&lt;BR&gt;&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;EmailPromotion&lt;BR&gt;&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;ModifiedDate&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&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;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; AdventureWorks&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Person&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;BR&gt;go&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; CDCSource&lt;BR&gt;go&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- create and populate dbo.Contact 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;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;from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.tables&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;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;'Contact'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&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;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;BR&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; ContactID&lt;BR&gt;&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;Title&lt;BR&gt;&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;MiddleName&lt;BR&gt;&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;Suffix&lt;BR&gt;&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;EmailPromotion&lt;BR&gt;&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;ModifiedDate&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;into&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;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; AdventureWorks&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Person&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Contact&lt;BR&gt;go&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;STRONG&gt;Change Tracking&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Change Tracking is enabled on the database and then on individual tables. To enable Change Tracking in CTP5 use the following T-SQL statement:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- enable CDC on database...&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 color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; is_cdc_enabled&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;&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;'CDCSource'&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; is_cdc_enabled &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=#0000ff size=2&gt;&amp;nbsp;exec&lt;/FONT&gt;&lt;FONT size=2&gt; sys.sp_cdc_enable_db_change_data_capture&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Once Change Tracking is enabled on the database you can enable Change Data Capture on individual tables using a script similar to the following:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- enable CDC on dbo.Contact table...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;exec&lt;/FONT&gt;&lt;FONT size=2&gt; sys.sp_cdc_enable_table_change_data_capture &lt;BR&gt;&amp;nbsp; @source_schema &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;'dbo'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; @source_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;'Contact'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; @role_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;'cdc_admin'&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;&lt;STRONG&gt;Making It Work&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Books Online has us using a table-valued function to access the cdc.dbo_Contact_CT table, but that function is merely a stub in CTP5. Here's where I got creative to make it work. &lt;/P&gt;
&lt;P&gt;Create a table-valued function dbo.uf_Contact:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- build CDC table-valued function...&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; &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; from&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;sys.objects&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; &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;'uf_Contact'&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;function&lt;/FONT&gt;&lt;FONT size=2&gt; cdc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;uf_Contact&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;function&lt;/FONT&gt;&lt;FONT size=2&gt; cdc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;uf_Contact &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;@start_time &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;/FONT&gt;&lt;FONT size=2&gt;@end_time &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;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;returns&lt;/FONT&gt;&lt;FONT size=2&gt; @Contact &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;table&lt;/FONT&gt;&lt;FONT size=2&gt; &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;int&lt;BR&gt;&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=#0000ff size=2&gt;bit&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=#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 color=#808080 size=2&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 color=#808080 size=2&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 color=#808080 size=2&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 color=#808080 size=2&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 color=#808080 size=2&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 color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;EmailPromotion &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;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 color=#808080 size=2&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;/FONT&gt;&lt;FONT size=2&gt;CDC_OPERATION &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;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;)&lt;/FONT&gt;&lt;FONT size=2&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=#0000ff size=2&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @from_lsn &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;binary&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;/FONT&gt;&lt;FONT size=2&gt; @to_lsn &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;binary&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 color=#0000ff size=2&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;@start_time &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;select&lt;/FONT&gt;&lt;FONT size=2&gt; @from_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; sys.fn_cdc_get_min_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Contact'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @from_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; sys.fn_cdc_increment_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;sys.fn_cdc_map_time_to_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'largest less than or equal'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@start_time&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 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@end_time &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;select&lt;/FONT&gt;&lt;FONT size=2&gt; @to_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; sys.fn_cdc_get_max_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @to_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; sys.fn_cdc_map_time_to_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'largest less than or equal'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@end_time&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 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@from_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; sys.fn_cdc_increment_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@to_lsn&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- Query for change 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; @Contact&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&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;NameStyle&lt;BR&gt;&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;FirstName&lt;BR&gt;&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;LastName&lt;BR&gt;&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;EmailAddress&lt;BR&gt;&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;Phone&lt;BR&gt;&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=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;case&lt;/FONT&gt;&lt;FONT size=2&gt; __$operation&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;when&lt;/FONT&gt;&lt;FONT size=2&gt; 1 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'D'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;when&lt;/FONT&gt;&lt;FONT size=2&gt; 2 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/FONT&gt;&lt;FONT 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;&amp;nbsp;when&lt;/FONT&gt;&lt;FONT size=2&gt; 4 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;then&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'U'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;else&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;end&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; CDC_OPERATION&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; cdc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;dbo_Contact_CT&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; __$start_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;between&lt;/FONT&gt;&lt;FONT size=2&gt; @from_lsn &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; @to_lsn&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;nbsp;and&lt;/FONT&gt;&lt;FONT size=2&gt; __$operation &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;!=&lt;/FONT&gt;&lt;FONT size=2&gt; 3 &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;--'all'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;BR&gt;end&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;go&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This is the function we will query from SSIS to get changes. &lt;/P&gt;
&lt;P&gt;Change Tracking is now in place for CDCSource and dbo.Contact. Changes made to the dbo.Contact will be stored in the cdc.dbo_Contact_CT table.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The SSIS Package&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Let's build an SSIS package to take advantage of Change Tracking. Create a new SSIS 2008 project and rename the default package ChangeDataCapture.dtsx. Again, I'm using the&amp;nbsp;&lt;SPAN id=nsrTitle&gt;Improving Incremental Loads with Change Data Capture - accessible from Change Data Capture In Integration Services -&lt;/SPAN&gt;&amp;nbsp;topic in SQL Server 2008 CTP5 Books Online (ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10is_1devconc/html/c4aaba1b-73e5-4187-a97b-61c10069cc5a.htm).&lt;/P&gt;
&lt;P&gt;Add the following package-scoped variables:&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Name&amp;nbsp;&lt;/U&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; &lt;U&gt;Data Type&lt;/U&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;U&gt;Value&lt;/U&gt;&lt;BR&gt;ExtractStartTime &amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime&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;&lt;BR&gt;ExtractEndTime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime&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;&lt;BR&gt;DataReady&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32&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; 2&lt;BR&gt;DelaySeconds&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32&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; 10&lt;BR&gt;IntervalID&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; Int32&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; 0&lt;BR&gt;TimeoutCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32&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; 0&lt;BR&gt;TimeoutCeiling&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32&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; 20&lt;BR&gt;SQLDataQuery&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String&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; SELECT * FROM cdc.uf_Contact(null, '2008-01-16 01:00:00')&lt;/P&gt;
&lt;P&gt;Right-click in the Connection Managers space at the bottom of the package and select" New ADO.NET Connection...".&amp;nbsp;Connect to an instance of SQL Server 2008 CTP5. My instance is the default instance on a virtual server named VPCSQL2K8CTP5. In the "Select or enter a database name" textbox enter CDCSource:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC04.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Test Connection button to make sure all is well with your connectivity. Correct any issues and click the OK button to close the editor. &lt;/P&gt;
&lt;P&gt;You are free to leave the connection manager named as is, but I like to have the names make sense to me. Right-click the Connection Manager and rename it "CDCSource.ADO". &lt;/P&gt;
&lt;P&gt;Create two more Connection Managers. Make them OLEDB Connection Managers. Set up one for CDCSource and name it CDCSource.OLEDB. Set up the other for CDCTarget and name it (wait for it...) CDCTarget.OLEDB. &lt;img src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task onto the Control Flow canvas and rename it Get Interval. Set the ConnectionType property to the OLEDB&amp;nbsp;and the Connection property CDCSource.OLEDB. Set the SQLStatement property to:&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&gt;&lt;FONT color=#ff00ff size=2&gt;DATEADD&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;hh&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=#ff00ff size=2&gt;GETDATE&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; ExtractStartTime&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;GetDate&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; ExtractEndTime&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Set the ResultSet property to Single Row. On the Result Set page, add two results: &lt;/P&gt;
&lt;P&gt;&lt;U&gt;Result Name&lt;/U&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;U&gt;Variable Name&lt;/U&gt;&lt;BR&gt;0&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; User::ExtractStartTime&lt;BR&gt;1&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; User::ExtractEndTime&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC00.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Drag and drop a For Loop Container onto the Control Flow and connect the Get Interval Execute SQL Task to it using a Success precedence constraint. Double-click the For Loop to open the editor. Set the InitExpression property to @DataReady = 0 and the EvalExpression property to @DataReady == 0:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC03.png"&gt;&lt;/P&gt;
&lt;P&gt;Drag an Execute SQL Task into the For Loop Container. Change the name to Check Change Data Status and double-click the Task to open the editor. Set the Connection to CDCSource.OLEDB and the SQLStatement property to the following 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 size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&gt;declare&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;BR&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 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 size=2&gt; tran_end_time &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; cdc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;lsn_time_mapping&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; where&lt;/FONT&gt;&lt;FONT size=2&gt; tran_end_time &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ? &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&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;=&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 3 &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&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 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 size=2&gt; tran_end_time &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; cdc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;lsn_time_mapping&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; where&lt;/FONT&gt;&lt;FONT size=2&gt; tran_end_time &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ? &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 1 &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 2&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &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;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;@DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 0&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;(&lt;/FONT&gt;&lt;FONT size=2&gt;@TimeoutCount &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ?&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 5&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; @DataReady &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; DataReady&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; @TimeoutCount &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; TimeoutCount&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Set the Parameters as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC01.png"&gt;&lt;/P&gt;
&lt;P&gt;Set the ResultSet property to Single Row and the Result Set page as follows:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC02.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor. Drag a Script Task into the For Loop Container with the Execute SQL Task. Double-click it to open the editor. Set the Script Language to Microsoft Visual Basic 2005 (you can now also use Microsoft Visual C# 2005) and click the ellipsis in the ReadOnlyVariables property and select User::DelaySeconds:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC05.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;I have to pause here and say "Kudos!" to the SSIS team for this interface. I usually fat-finger the variable names when typing them. This is much, much nicer. Thanks!&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Click the&amp;nbsp;OK button to close the Select Variables form. Click the Edit Script button to open the VSTA editor. Double-click the ScriptMain.vb&amp;nbsp;class to open the script editor. Edit &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;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;/FONT&gt;&lt;/FONT&gt; so it reads as follows:&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;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=#008000 size=2&gt;'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;' Add your code here&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;System.Threading.Thread.Sleep(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CType&lt;/FONT&gt;&lt;FONT size=2&gt;(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"DelaySeconds"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;FONT size=2&gt;) * 1000)&lt;BR&gt;Dts.TaskResult = ScriptResults.Success&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;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;Close the VSTA editor and click the OK button to close the Script Task editor.&lt;/P&gt;
&lt;P&gt;Connect the Execute SQL Task to the Script Task with a Success Precedence Constraint. Double-click the constraint to open the editor. Dropdown the Evaluation operation and select "Expression and Constraint". Make sure the Value is set to Success. Enter the following expression into the Expression textbox: "@DataReady == 0 &amp;amp;&amp;amp; @TimeoutCount &amp;lt;= @TimeoutCeiling" as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC06.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Test button to test the validity of the expression. Click the OK buttont to close the Precedence Constraint editor. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;I like the visual effects available for precedence constraints. When you hover over the Fx box you get a tooltip that displays the Expression value:&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC07.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;But note: if you select the precedence constraint and view properties (a quick shortcut is to press the F4 key) you can set the Annotation property from AsNeeded to ConstraintOptions, which will display the Expression property value always - how cool:&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC08.png"&gt;&lt;/P&gt;
&lt;P&gt;Add a second Script Task inside the For Loop Container and&amp;nbsp;double-click to open the editor. Select Microsoft Visual Basic 2005 as the language and select User::DataReady and User::ExtractStartTime as ReadOnlyVariables.&amp;nbsp;Click the Edit Script button and open ScriptMain.vb. Replace the code in &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;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;/FONT&gt;&lt;/FONT&gt; with the following VB.Net:&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;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=#008000 size=2&gt;'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;' Add your code here&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;' User variables.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady &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;/FONT&gt;&lt;FONT size=2&gt; = _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CType&lt;/FONT&gt;&lt;FONT size=2&gt;(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"DataReady"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Integer&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; extractStartTime &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;Date&lt;/FONT&gt;&lt;FONT size=2&gt; = _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CType&lt;/FONT&gt;&lt;FONT size=2&gt;(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"ExtractStartTime"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value, DateTime)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;' System variables.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; packageName &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; = _&lt;BR&gt;Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"PackageName"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value.ToString()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; executionStartTime &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;Date&lt;/FONT&gt;&lt;FONT size=2&gt; = _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CType&lt;/FONT&gt;&lt;FONT size=2&gt;(Dts.Variables(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"StartTime"&lt;/FONT&gt;&lt;FONT size=2&gt;).Value, DateTime)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventMessage &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;New&lt;/FONT&gt;&lt;FONT size=2&gt; System.Text.StringBuilder()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady = 1 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;OrElse&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady = 5 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady = 1 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;eventMessage.AppendLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Start Time Error"&lt;/FONT&gt;&lt;FONT size=2&gt;)&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;eventMessage.AppendLine(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"Timeout Error"&lt;/FONT&gt;&lt;FONT size=2&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;If&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;With&lt;/FONT&gt;&lt;FONT size=2&gt; eventMessage&lt;BR&gt;.Append(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"The package "&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;.Append(packageName)&lt;BR&gt;.Append(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;" started at "&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;.Append(executionStartTime.ToString())&lt;BR&gt;.Append(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;" and ended at "&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;.AppendLine(DateTime.Now().ToString())&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady = 1 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Append(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"The specified ExtractStartTime was "&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;.AppendLine(extractStartTime.ToString())&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;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;With&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;System.Windows.Forms.MessageBox.Show(eventMessage.ToString())&lt;BR&gt;Dts.Log(eventMessage.ToString(), 0, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Nothing&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;Dts.TaskResult = ScriptResults.Failure&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; Else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts.TaskResult = ScriptResults.Success&lt;BR&gt;&lt;/FONT&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;If&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;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;Close the editor and click the OK button to close the Script Task editor. &lt;/P&gt;
&lt;P&gt;Connect the Execute SQL Task to the new Script Task with a Success Precedence Constraint. Edit the Precedence Constraint, setting the Evaluation Operation to "Success and Constraint" and the Expression to "@DataReady == 1 || @DataReady == 5". Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;And Now For Something Completely Different&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This next part isn't included in the Books Online walk-through. I needed to add it because I was stopping a lot during my presentations. It doesn't &lt;EM&gt;hurt&lt;/EM&gt; to have this in your package. So here goes.&lt;/P&gt;
&lt;P&gt;We're now done with the For Loop Container. Add a new Execute SQL Task to the Control Flow canvas below the For Loop Container, and connect the For Loop Container to it using a Success Precedence Constraint. Double-click it to open the editor. Change the Name property to Update EndTime and the ResultSet property to Single Row. Set the Connection property to CDCSource.OLEDB and add the following statement to the SQLStatement property:&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; GETDATE() &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; ExtractEndTIme&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the Result Set page and add a Result. Set the Name to 0 and the Variable Name property to User::ExtractEndTime. Click the OK button to close the editor.&lt;/P&gt;
&lt;P&gt;Why did I do this? The scripts that retrieve the changed rows use time. You'll see when we walk through the demo portion, you can wait several minutes between the time you initially set the ExtractEndTime variable in the original Execute SQL Task and the time you actually update data in the Change-Tracked table. This task makes certain that the value of ExtractEndTime is current when you exit the loop.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Back To Our Regularly Scheduled Programming&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Next, add a Script Task and double-click it to open the editor. This time select Microsoft Visual C# as the ScriptLanguage property. Add User::DataReady, User::ExtractEndTime, and User::ExtractStartTime in the ReadOnlyVariables property, and User:SQLDataQuery in the ReadWriteVariables property:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC09.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the Edit Script button to open the VSTA editor and double-click ScriptMain.cs to open the class. Replace the public void Main() method code with the following code:&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;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Main()&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //string sEST;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //sEST = Dts.Variables["ExtractStartTime"].Value.ToString();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //System.Windows.Forms.MessageBox.Show(sEST);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&lt;/FONT&gt;&lt;FONT size=2&gt; dataReady;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT size=2&gt; extractStartTime;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT size=2&gt; extractEndTime;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/FONT&gt;&lt;FONT size=2&gt; sqlDataQuery;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataReady = (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;)Dts.Variables[&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"DataReady"&lt;/FONT&gt;&lt;FONT size=2&gt;].Value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; extractStartTime = (System.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT size=2&gt;)Dts.Variables[&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"ExtractStartTime"&lt;/FONT&gt;&lt;FONT size=2&gt;].Value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; extractEndTime = (System.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT size=2&gt;)(Dts.Variables[&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"ExtractEndTime"&lt;/FONT&gt;&lt;FONT size=2&gt;].Value);&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //string sExtractStart;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //sExtractStart = extractStartTime.ToString();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //System.Windows.Forms.MessageBox.Show(sExtractStart);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (dataReady == 2)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlDataQuery = &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"SELECT * FROM cdc.uf_Contact('"&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;.Format(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"{0:yyyy-MM-dd hh:mm:ss}"&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;BR&gt;extractStartTime) + &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"', '"&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;.Format(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"{0:yyyy-MM-dd hh:mm:ss}"&lt;/FONT&gt;&lt;FONT size=2&gt;, extractEndTime) + &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"')"&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlDataQuery = &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"SELECT * FROM cdc.uf_Contact(null"&lt;/FONT&gt;&lt;FONT size=2&gt; + &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;", '"&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;.Format(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"{0:yyyy-MM-dd hh:mm:ss}"&lt;/FONT&gt;&lt;FONT size=2&gt;, extractEndTime) + &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"')"&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts.Variables[&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;"SQLDataQuery"&lt;/FONT&gt;&lt;FONT size=2&gt;].Value = sqlDataQuery;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //system.windows.forms.messagebox[sqlDataQuery];&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Forms.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;MessageBox&lt;/FONT&gt;&lt;FONT size=2&gt;.Show(sqlDataQuery);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts.TaskResult = (&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=#008080 size=2&gt;ScriptResults&lt;/FONT&gt;&lt;FONT size=2&gt;.Success;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Close the VSTA editor and click the OK button to close the Script Task editor. &lt;/P&gt;
&lt;P&gt;Add a Data Flow Task and connect the former Script Task to it via a Success Precedence Constraint. Double-click the Data Flow Task to open the editor. Drag an OLE DB Data Adapter onto the Data Flow canvas. Set the Connection Manager property to CDCSource.OLEDB, the Data Access Mode property to "SQL command from variable", and the Variable name property to User::SQLDataQuery:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC10.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor. &lt;/P&gt;
&lt;P&gt;As in SSIS 2005, a Conditional Split transformation accepts a single input and allows you to define multiple outputs using the SSIS Expression Language. Rows at the input are redirected to one and only one of the outputs. If you are familiar with the&amp;nbsp;&lt;EM&gt;switch&lt;/EM&gt; function in C-ish languages or the &lt;EM&gt;Select Case&lt;/EM&gt; function in VB-ish languages, the Conditional Split operates much the same way. The &lt;EM&gt;else&lt;/EM&gt; from these programming functions is accomplished via the Default Output, which you can also label with a name.&lt;/P&gt;
&lt;P&gt;Drag a Conditional Split Transformation onto the canvas. Add an output named Inserts with the Condition expression set to &lt;FONT face="Courier New"&gt;CDC_OPERATION == "I"&lt;/FONT&gt;. Add another output named Updates with the Condition expression set to &lt;FONT face="Courier New"&gt;CDC_OPERATION == "U"&lt;/FONT&gt;. Add a third&amp;nbsp;output named Deletes with the Condition expression set to &lt;FONT face="Courier New"&gt;CDC_OPERATION == "D":&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC11.png"&gt;&lt;/P&gt;
&lt;P&gt;These three outputs will divide our data stream into rows to be inserted, updated, and deleted (respectively). For the Inserts, drag an OLEDB Destination Adapter onto the Data Flow canvas. For the Updates and Deletes, drag two OLEDB Command transformations onto the canvas. Rename the OLEDB Destination Adapter "Land Inserts". Rename the OLEDB Command transformations "Apply Updates" and "Apply Deletes" (respectively).&lt;/P&gt;
&lt;P&gt;Connect a data flow from the Conditional Split to the&amp;nbsp;Destination Adapter.&amp;nbsp;Because there are multiple outputs available from the Conditional Split, you will be prompted to select one. Select the Inserts output:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/IMAGES/EXT/cdc14.PNG"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the Input Output Selection form.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Double-click the Destination Adapter to open the editor. Set the OLEDB Connection Manager property the to CDCTarget.OLEDB connection manager. Select the dbo.Contact table from the "Name of the table or view" dropdown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC12.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the editor.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Drag a second data flow from the Conditional Split to the Apply Updates OLEDB Command transformation and select Updates when prompted for an output. Double-click the Apply Updates OLEDB Command transformation to open the Advanced Editor for Apply Updates (OLEDB Command transformations do not have a standard editor - at least not in CTP5). Select the CDCTarget.OLEDB connection manager on the Connection Managers tab. On the Component Properties tab, set the SqlCommand property to the following T-SQL statement:&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.Contact&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;set&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;NameStyle = ?&lt;BR&gt;&amp;nbsp;,Title = ?&lt;BR&gt;&amp;nbsp;,FirstName = ?&lt;BR&gt;&amp;nbsp;,MiddleName = ?&lt;BR&gt;&amp;nbsp;,LastName = ?&lt;BR&gt;&amp;nbsp;,Suffix = ?&lt;BR&gt;&amp;nbsp;,EmailAddress = ?&lt;BR&gt;&amp;nbsp;,EmailPromotion = ?&lt;BR&gt;&amp;nbsp;,Phone = ?&lt;BR&gt;&amp;nbsp;,ModifiedDate = ?&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; ContactID = ?&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Click the Column Mappings tab and map Available Input Columns to Available Destination Columns&amp;nbsp;in one of two ways:&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV&gt;On the top half of the editor drag individual Input Columns and drop them on the desired Destination Columns.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;On the lower half of the editor select Input Columns to match to Destination Columns.&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The question marks in the SqlCommand statement map to Paramater values (Param_&lt;EM&gt;n&lt;/EM&gt;) by ordinal. The first question mark maps to Param_0, the second to Param_1, and so on. Our first question mark assigns a value to the NameStyle column, so map the NameStyle Input to Param_0 in the Destination. Continue this, mapping the following:&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Input&lt;/U&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;U&gt;Destination&lt;/U&gt;&lt;BR&gt;NameStyle&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; Param_0&lt;BR&gt;Title&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Param_1&lt;BR&gt;FirstName&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; Param_2&lt;BR&gt;MiddleName&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; Param_3&lt;BR&gt;LastName&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; Param_4&lt;BR&gt;Suffix&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Param_5&lt;BR&gt;EmailAddress&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; Param_6&lt;BR&gt;EmailPromotion&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; Param_7&lt;BR&gt;Phone&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Param_8&lt;BR&gt;ModifiedDate&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; Param_9&lt;BR&gt;ContactID&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; Param_10&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC13.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click the OK button to close the Advanced Editor.&lt;/P&gt;
&lt;P&gt;Drag another output from the Conditional Split to the Apply Deletes OLEDB Command transformation and select Deletes when prompted to select an output. Double-click the OLEDB Command to open its Advanced Editor and select CDCTarget.OLEDB for the Connection Manager. On the Component Properties tab, enter the following statement in the SqlCommand property:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;delete&lt;/FONT&gt;&lt;FONT size=2&gt; dbo.Contact &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; ContactID = ?&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;On the Column Mappings tab, map the ContactID input to the Param_0 Destination and click the OK button to close the Advanced Editor.&lt;/P&gt;
&lt;P&gt;The Data Flow is complete and should appear similar to the following:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC15.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Go, Go, Change Data Capture!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Execute the SSIS package and view the Control Flow. If you do nothing more, you will see the For Loop execute 20 times, each time incrementing the @TimeoutCount variable value and checking to see if it has reached the @TimeoutCeiling variable value:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC16.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;However, if you open SQL Server Management Studio (SSMS) and execute a query that changes the underlying data in the CDCSource database, the SSIS package will detect the change and break out of this loop.&lt;/P&gt;
&lt;P&gt;Restart the SSIS package (to reset the @TimeoutCount variable value). Use the following query to execute changes in the CDCSource.dbo.Contact table:&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-----------------------&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- Execute Changes --&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-----------------------&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- Update --&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;update&lt;/FONT&gt;&lt;FONT size=2&gt; dbo.Contact&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;FONT size=2&gt; EmailAddress = &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'_'&lt;/FONT&gt;&lt;FONT size=2&gt; + EmailAddress&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; ContactID % 5 = 0&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- Insert --&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; dbo.Contact&lt;BR&gt;(NameStyle&lt;BR&gt;,Title&lt;BR&gt;,FirstName&lt;BR&gt;,MiddleName&lt;BR&gt;,LastName&lt;BR&gt;,Suffix&lt;BR&gt;,EmailAddress&lt;BR&gt;,EmailPromotion&lt;BR&gt;,Phone&lt;BR&gt;,ModifiedDate)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;values&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(0&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Mr.'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Andy'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Mortimer'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;,'Leonard'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'aleonard@solidq.com'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;,0&lt;BR&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'123-456-6789'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;tdate()&lt;BR&gt;)&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;-- Delete --&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;delete&lt;/FONT&gt;&lt;FONT size=2&gt; dbo.Contact&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; ContactID % 27 = 0&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Return to SSIS and note that on the next pass through the loop more code is executed:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC17.png"&gt;&lt;/P&gt;
&lt;P&gt;If you didn't comment it out, the C# script should display a message box containing the query (stored in @User::SqlDataQuery)&amp;nbsp;that will serve as the source of the OLEDB Source Adapter in the Data Flow:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC18.png"&gt;&lt;/P&gt;
&lt;P&gt;Click the OK button to dismiss the non-modal message box.&lt;/P&gt;
&lt;P&gt;Click the Data Flow tab to observe changes&amp;nbsp;as they are&amp;nbsp;applied to CDCTarget. When complete, the Data Flow should look similar to the following:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC19.png"&gt;&lt;/P&gt;
&lt;P&gt;You can also look at the table containing the changes by executing the following statement against CDCSource in SSMS:&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;__$start_lsn&lt;BR&gt;,__$end_lsn&lt;BR&gt;,__$seqval&lt;BR&gt;,__$operation&lt;BR&gt;,__$update_mask&lt;BR&gt;,ContactID&lt;BR&gt;,NameStyle&lt;BR&gt;,Title&lt;BR&gt;,FirstName&lt;BR&gt;,MiddleName&lt;BR&gt;,LastName&lt;BR&gt;,Suffix&lt;BR&gt;,EmailAddress&lt;BR&gt;,EmailPromotion&lt;BR&gt;,Phone&lt;BR&gt;,ModifiedDate&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; cdc.dbo_Contact_CT&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;In my database the change tracking table appears as shown:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/CDC20.png"&gt;&lt;/P&gt;
&lt;P&gt;You will recall from (building the function) that the __$operation column is used to determine whether the change is an insert, update, or delete. I mentioned this earlier: The value in this column captures the type of change. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;__$operation&lt;/U&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;U&gt;Change Type&lt;BR&gt;&lt;/U&gt;1&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; Delete&lt;BR&gt;2&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; Insert&lt;BR&gt;3&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; Update (Before)&lt;BR&gt;4&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; Update (After)&lt;/P&gt;
&lt;P&gt;The changes in the image above are all Updates.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post represents one method to use SQL Server 2008 CTP5 (Nov 2007) Change Data Capture with SSIS 2008. CTP6 will be out soon and things will likely change. I will write an updated version at that time, and endeavor to keep my readers posted on other changes to this technology between now and SQL Server 2008 Release To Manufacturing (RTM).&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=148" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Design+Patterns/default.aspx">Design Patterns</category></item><item><title>SSIS Design Pattern - ETL Instrumentation, Part 4</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2007/12/19/ssis-design-pattern-etl-instrumentation-part-4.aspx</link><pubDate>Thu, 20 Dec 2007 01:59:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:119</guid><dc:creator>andy</dc:creator><slash:comments>0</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/119.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=119</wfw:commentRss><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;A class="" title="SSIS Design Pattern - ETL Instrumentation, Part 1" href="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2007/07/15/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://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2007/11/10/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://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/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.&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&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 src="http://vsteamsystemcentral.com/cs21/emoticons/emotion-11.gif" alt="Cool" /&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;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=119" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/ETL+Instrumentation/default.aspx">ETL Instrumentation</category></item><item><title>Installing Virtual Server On Vista Ultimate 64-bit</title><link>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/2007/12/09/installing-virtual-server-on-vista-ultimate-64-bit.aspx</link><pubDate>Sun, 09 Dec 2007 02:12:00 GMT</pubDate><guid isPermaLink="false">d291d4df-cf3d-4686-b1b1-8a0a96a3a0a7:124</guid><dc:creator>andy</dc:creator><slash:comments>2</slash:comments><comments>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/comments/124.aspx</comments><wfw:commentRss>http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/commentrss.aspx?PostID=124</wfw:commentRss><description>&lt;DIV class=BlogPostContent&gt;
&lt;P&gt;&lt;STRONG&gt;Mea...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This may be a little off-topic. &lt;/P&gt;
&lt;P&gt;I use Virtual Server and Virtual PC a &lt;EM&gt;lot&lt;/EM&gt; for things like testing beta and CTP releases of SQL Server. I don't have time or the inclination to reformat physical hard drives, load an OS, or even fiddle with restoring from an enterprise backup solution like &lt;A class="" href="http://www.symantec.com/norton/products/overview.jsp?pcid=br&amp;amp;pvid=ghost12" target=_blank&gt;Ghost&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I blogged about &lt;A class="" href="http://sqlblog.com/blogs/andy_leonard/archive/2007/11/30/installing-reporting-services-2005-on-vista.aspx" target=_blank&gt;configuring IIS7 for Reporting Services 2005&lt;/A&gt;, so this&amp;nbsp;may have more&amp;nbsp;relevance than I imagine.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you're not using virtualized machines or servers, you should check them out. They're great for testing new stuff - relatively risk-free.&amp;nbsp;I&amp;nbsp;am aware of&amp;nbsp;two flavors of virtual engines: &lt;A class="" href="http://www.vmware.com/" target=_blank&gt;VMWare&lt;/A&gt; and Microsoft products: &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=04D26402-3199-48A3-AFA2-2DC0B40A73B6&amp;amp;displaylang=en" target=_blank&gt;Virtual PC&lt;/A&gt; and &lt;A class="" href="http://technet.microsoft.com/en-us/bb738033.aspx" target=_blank&gt;Virtual Server&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I have no experience with VMWare.&lt;/P&gt;
&lt;P&gt;The Microsoft products are 100% free (&lt;A class="" href="http://en.wikipedia.org/wiki/Free_as_in_beer" target=_blank&gt;as in beer&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;I do not know which is better. I imagine that, like all things in life, one has advantages over the other and vice versa. The Microsoft stuff does what I need, so I've not ventured to search greener pastures (ever wonder why those pastures are greener? Think about it).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Get To The Configuration Already!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When I installed Virtual Server 2005 R2 SP1 on my newish Vista Ultimate 64-bit machine, I saw quirky stuff. For example, I could not change the port for admin - it defaulted to 80 and gave me an error message stating my server "didn't allow" installations on other ports.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/VistaVS2k5_0.png"&gt;&lt;/P&gt;
&lt;P&gt;Reeeeaaallly? Huh. &lt;/P&gt;
&lt;P&gt;I proceeded with the installation anyway and &lt;EM&gt;nothing&lt;/EM&gt; worked. Well, nothing in Virtual Server. I could not get to the administrative page and, in case you've never worked with Virtual Server, you can do &lt;EM&gt;nothing&lt;/EM&gt; unless you can reach the administration page. (Note, you can do stuff if you like to type. I don't like to type.)&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;&lt;A class="" href="http://www.live.com/" target=_blank&gt;search&lt;/A&gt; ensued. I found a &lt;A class="" href="http://blogs.technet.com/mattmcspirit/archive/2006/10/18/running-virtual-server-on-vista.aspx" target=_blank&gt;good article&lt;/A&gt; on why this was happening and how to fix it. It happens because IIS7 isn't configured (out of the box)&amp;nbsp;to allow&amp;nbsp;Virtual Server 2005 R2&amp;nbsp;to do&amp;nbsp;its thing. To fix it, open Control Panel, Programs and Features (the snappy new Add/Remove Programs), then click "Turn Windows features on or off".&lt;/P&gt;
&lt;P&gt;You want to&amp;nbsp;navigate to Internet Information Services folder and make your Windows Features look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/VistaVS2k5_1.png"&gt;&lt;BR&gt;&lt;EM&gt;(A Thousand Words)&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The image above may be the&amp;nbsp;first on the web (it was the only one I could find) of how to configure IIS7 on Vista Ultimate 64-bit for both&amp;nbsp;SSRS 2005 &lt;EM&gt;and&lt;/EM&gt; Virtual Server 2005 R2.&lt;/P&gt;
&lt;P&gt;Note you still get the Configure Components screen displayed above - the one with port textbox disabled and set to 80 - at least in Vista Ultimate. But you also get these screens:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/VistaVS2k5_2.png"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://vsteamsystemcentral.com/images/ext/VistaVS2k5_3.png"&gt;&lt;/P&gt;
&lt;P&gt;:{&amp;gt; Andy&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://vsteamsystemcentral.com/cs21/aggbug.aspx?PostID=124" width="1" height="1"&gt;</description><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/SSRS/default.aspx">SSRS</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Vista/default.aspx">Vista</category><category domain="http://vsteamsystemcentral.com/cs21/blogs/applied_business_intelligence/archive/tags/Virtual+Server/default.aspx">Virtual Server</category></item></channel></rss>