Posted
on Mar 3, 2011 in Technical Tips | 0 comments
For some reason, SSIS’s XML Data source does not allow you to directly access root level attributes. Therefore, we’ve got to use a XML Task and variables in order to pull this data in.
- Create a variable for every attribute, use the string data type (change later in data flow if need be)
- Use the following example (fill your own Xpath in the Second Operand)

This example will only pull in one value. Should there be multiple attributes with the same name, you’ll have to use a Foreach loop.
Posted
on Feb 28, 2011 in Technical Tips | 0 comments
At some point you may need to use Xpath from within a script task rather than using Integration Services built in XML Task’s Xpath functionality. Here’s how I implemented it. The primary limitation is that it will only return a single value, but this can be adjusted to return multiple values easily.
Chances are you’ll already be using a script task, but incase you don’t, start with a standard Script Task (this can be either a Control Flow Script Task or a Data Flow Script Task). Don’t forget to set your ReadOnly / ReadWrite variables.

Here’s the boilerplate code for using Xpath in a script task
XmlDocument doc = new XmlDocument();
public void Main()
{
sampleUrl = http://www.example.com/sample.xml;
doc.Load(sampleUrl);
int id = 5;
string roll = Xpathquery("/people[@id=”+id+”]/@roll"); // This will find the @roll attribute where the id attribute is 5.
//TODO: Write the string to a SSIS variable or do with it what you’d like.
Dts.TaskResult = (int)ScriptResults.Success;
}
public string Xpathquery(string xpath)
{
XPathNavigator nav = doc.CreateNavigator(); // Compile a standard XPath expression
XPathExpression expr;
expr = nav.Compile(xpath);
XPathNodeIterator iterator = nav.Select(expr);
//Iterate on the node set
try{
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
return nav2.Value;
}
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
return null;
}
return null;
}
Posted
on Feb 26, 2011 in Technical Tips | 0 comments
Reading from variables to augment rows with data from variables isn’t readily apparent in SSIS. A workaround I found was to use a script task right before your OLE DB Destination and access the SSIS variable objects directly.
Script Task Setup
- Start with a standard Script Task in your data flow.
- Add columns to your output in the ‘Inputs and Outputs’ tab, set the names and output data types appropriately

- Access Variables in your ‘main’ script section by using the following code
IDTSVariables100 vars = null; //Gets reference to the SSIS Variables
this.VariableDispenser.LockOneForRead("session", ref vars);//Locks the Variable in quotes, for Read ….use LockOneforWrite to write to variable
string temp = (string)vars[0].Value;//Assigns to value to a string
Row.sessionId = Convert.ToInt32(temp);//converts to Int
vars.Unlock();//Unlocks the var.
Posted
on Feb 21, 2011 in Technical Tips | 0 comments
In order to save your SSIS package built using Business Intelligence Development Studio (BIDS) to Integration Services MSDB, you’ll need to:
- In BIDS, right-click the solution and select
Properties
- Under
Deployment Utility, change the CreateDeploymentUtility option from False to True

- Rebuild the solution
- Now find in your solution project folder under the
bin\deployment file path an Integration Services Deployment Manifest. Right-click this manifest file and select Deploy.
Follow the wizard steps to deploy to your server and choose where to save to the database. The package should then appear in SSIS in SQL Server Management Studio under Integration Services in /MSDB.
Posted
on Feb 15, 2011 in Technical Tips | 0 comments

Occasionally, I’ve needed to pull XML from the internet via an URL. This allows you to dynamically pull XML from sources than your local.In order to do so, you’ll need a string variable (to populate with the XML from the internet) and the code below in a Script Task.
Every time you need to reference the XML in the variable, change your XML Data Sources and XML tasks to pull XML from a variable.
string Url = (string)Dts.Variables["Url"].Value;
XmlDocument doc = new XmlDocument();
doc.Load(Url); //You can use a string here if you’d like…I pull from a variable for the URL
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
doc.WriteTo(xw);
sw.ToString(); Dts.Variables["Xml"].Value = sw.ToString();
Recent Comments