You are on page 1of 1

SSIS Expression Cheat Sheet

Create a le name with Expression on the Flat File or File Connection Manager: C:\\Project\\MyExtract+(DT_WSTR, 30)(DT_DBDATE) todays date GETDATE()+.csv Expression Output Example: C:\Projects\MyExtract2009-03-20.csv Use a 2 digit date RIGHT(0+(DT_WSTR,2)MONTH(GETDATE()),2) (ex. 03 for March Expression Output: 03 (if the month is March) instead of 3) Multiple condition if In this example, the statement determines that if the ColumnName is blank statement. or NULL, it will be set to unknown. To make a Logical AND condition, use && instead of the || operator. Return the rst ve characters from a zip code Derived Column Transform in the Data Flow: Remove a given character from a string REPLACE(SocialSecurityNumber, -, ) (ex. Remove - from a social security number) Derived Column Transform in the Data Flow: Uppercase data UPPER(ColumnName) Replace NULL with Derived Column Transform in the Data Flow: another value ISNULL(ColumnName) ? New Value : ColumnName Derived Column Transform in the Data Flow: Replace blanks with TRIM(ColumnName) == "" ? (DT_STR, 4, 1252) NULL (DT_STR, 4, NULL values 1252) : ColumnName Script Transform in the Data Flow Task with the code as follows ( VB 2008): Remove any nonnumeric data from a column Imports System.Text.RegularExpressions
Public Overrides Sub Input0_ProcessInputRows(ByVal Row As Input0Buffer) If Row.ColumnName_IsNull = False Or Row.ColumnName = Then Dim pattern As String = String.Empty Dim r As Regex = Nothing pattern = [^0-9] r = New Regex(pattern, RegexOptions.Compiled) Row.ColumnName = Regex.Replace(Row.ColumnName, pattern, ) End If End Sub

Problems Expression

B.I. MADE SIMPLE http://www.pragmatic works.com


B.I. Tools and Training from Industry Recognized Experts You Trust

ISNULL(ColumnName) || TRIM(ColumnName) == ? Unknown : ColumnName Derived Column Transform in the Data Flow: SUBSTRING(ZipCodePlus4, 1, 5)

Common SSIS Problems and Solutions


Tasks Required: Foreach Loop, Data Flow Task Solution: Con gure the Foreach Loop to loop over any particular directory of les. e loop should be con gured to output to a given variable. Map the given variable to a connection manager by using expressions. Solution: Double-click the precedence constraint and set the Evaluation property to Conditionally executing Expression and Constraint. Type the condition that you want to evaluate in the tasks Expression box. Solution: Use the /SET command in the DTExec command line or change the Property Pass in variables when tab in the Package Execution Utility to have the property path like: scheduling or running a \Package.Variables[User::VariableName].Properties[Value] package Move & rename the le at Tasks Required: File System Task Solution: Set the File System Task to rename the le and point to the directory youd the same time like to move it to. is enables you to rename and move the le in the same step. Loop over an array of data Tasks Required: Execute SQL Task, Foreach Loop in a table & perform a set of Solution: Use an Execute SQL Task to load the array and send the data into an object variable. Loop over the variable in a Foreach Loop by using an ADO Enumerator. tasks for each row Perform an incremental Tasks Required: 2 Execute SQL Tasks, Data Flow Task load of data Solution: Have the 1st Execute SQL Task retrieve a date from a control table of when the target table was last loaded and place that into a variable. In the Data Flow Task, create a date range on your query using the variable. en, update the control table using a 2nd Execute SQL Task to specify when the table was last updated. Components Required: Data Flow Task, Conditional Split, Lookup Transform or Merge Perform a conditional Join, OLE DB Command Transform update & insert Solution: Use the Lookup Transform or Merge Join to determine if the row exists on the destination and ignore a failed match. If the row yields blank on the key, then you know the row should be inserted into target (by Condtional Split). Otherwise, the row is a duplicate or an update. Determine if the row is an update by comparing the source value to the target value in the Conditional Split. e update can be done by an OLE DB Command Transform or by loading the data into a staging table. Loop over a list of les & load each one

Problems

Solutions

Convert text to proper Script Transform with the line of partial code as follows: case (ex. 1st le er in each word is uppercase) Row.OutputName = StrConv(Row.InputName, VBStrConv.ProperCase) Expression on the SQLStatementSource property of Execute SQL Task: Build dynamic SQL statement "SELECT Column FROM " + @[User::TableName] + " WHERE DateFilterColumn = '" + (DT_WSTR,4)YEAR(@[User::DateTimeVar]) + RIGHT("0" + (DT_WSTR,2)MONTH(@[User::DateTimeVar]), 2) + RIGHT("0" + (DT_WSTR,2)DAY(@[User::DateTimeVar]), 2) + "" Expression Output: SELECT Column FROM MyTable WHERE DateFilterColumn = '20060915' Calculate beginning of Expression on component or task: the previous month (DT_DATE)(DT_DBDATE)DATEADD ("dd",-1 * (DAY( GETDATE() )-1), DATEADD("month",-1, GETDATE() )) Expression on Derived Column Transform: Round to the nearest two decimal mark ROUND(YourNumber, 2) Expression Output Example: 1.2600000

CONVERT.

DEVELOP.
TM

DOCUMENT.

EXTEND.

You might also like