<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Patrice Manac'h Web Log : SSIS</title><link>http://blogs.msdn.com/pmanach/archive/tags/SSIS/default.aspx</link><description>Tags: SSIS</description><dc:language>fr-FR</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Export XML et SSIS</title><link>http://blogs.msdn.com/pmanach/archive/2005/10/28/486413.aspx</link><pubDate>Fri, 28 Oct 2005 23:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:486413</guid><dc:creator>pmanach</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pmanach/comments/486413.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pmanach/commentrss.aspx?PostID=486413</wfw:commentRss><description>&lt;P&gt;De manière assez étrange, on trouve dans les data flows SSIS une entrée XML mais pas de sortie. Etrange car si on inègre d'un tiers des fichiers XML, on peut légitimement s'attendre à lui renvoyer du XML...&lt;/P&gt;
&lt;P&gt;Après discussion interne, j'en ai retenu qu'il n'y avait pas vraiment de demande pour faire dans SSIS ce que l'on peut déjà faire avec OpenXML. Ou alors en tellement plus riche qu'on se retrouve avec un mapper Biztalk. Qui existe déjà.&lt;/P&gt;
&lt;P&gt;Pour l'instant, je n'ai trouvé qu'une méthode pour le faire dans SSIS : récupérer les données depuis la base, les traiter dans un data flow et utiliser un script (transformation ou destination) pour utiliser un objet XmlWriter ou XmlDocument.Save (c'est surtout une question de volumétrie attendue). J'aurais aimé plus élégant, il est probablement possible d'étendre SSIS en ajoutant une destination de type fichier XML mais en attendant, cela permet d'avancer...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486413" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pmanach/archive/tags/SSIS/default.aspx">SSIS</category></item><item><title>Utiliser un objet Ole Db Destination et des triggers</title><link>http://blogs.msdn.com/pmanach/archive/2005/10/09/478832.aspx</link><pubDate>Sun, 09 Oct 2005 15:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:478832</guid><dc:creator>pmanach</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pmanach/comments/478832.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pmanach/commentrss.aspx?PostID=478832</wfw:commentRss><description>&lt;P&gt;Pour insérer des données dans une base SQL Server, pas de soucis, on utilise un objet SQL Server Destination. Et si on veut les triggers, on coche la case dans les propriétés de l'objet (sinon, pas de triggers). Jusqu'ici, pas de problèmes. Mais si on veux faire la même chose via un objet OLE DB Destination ?&lt;/P&gt;
&lt;P&gt;Voyons voir : je pose un objet de ce type, je choisis une destination table ou view (au passage, je ne vois que les tables, je suppose que le support des views doit nécessiter une manipulation ou concerner d'autres types de serveur). Je choisis la table et je teste : les triggers ne s'exécutent pas. Grrr !!!&lt;/P&gt;
&lt;P&gt;OK, pas de problèmes, je change de table à SQL Command. Je cherche rapidement dans l'aide et je trouve une référence indiquant qu'il fuat utiliser une syntaxe avec le préfixe '?'. Je tape ma commande EXEC blabla ?parametre. J'appuie sur OK et je me fais insulter à coup d'erreur SQL Client.&lt;/P&gt;
&lt;P&gt;Zen. Je fouille un peu et j'en arrive à la conclusion suivante : la commande doit être de type SELECT (sur une table voir sur une view, je n'ai pas testé ce second cas). Je fais donc un select sur la table en question. Je valide, pas d'erreurs, je fais le mapping et le test. Et là, les triggers marchent.&lt;/P&gt;
&lt;P&gt;J'aurais aimé trouver comment lancer une procédure stockée spécifique mais ce sera dans une autre aventure...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478832" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pmanach/archive/tags/SSIS/default.aspx">SSIS</category></item><item><title>Utilisation d'un RecordSet avec une boucle ForEach</title><link>http://blogs.msdn.com/pmanach/archive/2005/10/08/478567.aspx</link><pubDate>Sat, 08 Oct 2005 18:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:478567</guid><dc:creator>pmanach</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pmanach/comments/478567.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pmanach/commentrss.aspx?PostID=478567</wfw:commentRss><description>&lt;P&gt;Parcourir les fichiers d'un répertoire, c'est bien mais parfois, on veut pouvoir stocker des paramètres en base et boucler dessus.&lt;/P&gt;
&lt;P&gt;De prime abord, rien de plus simple. Donc, je pose un objet "Execute SQL Task", je choisi la connection, la requête SQL. Dans l'onglet "Result Set", j'ajoute une entrée que je mappe sur une variable de type Objet. Enfin je lie cet objet à un objet Foreach. Je choisi une collection de type variable et je choisi la variable. Je mappe la variable de mon choix sur l'index supposé de la colonne qui m'intéresse. Je lance et paf, l'exception !&lt;/P&gt;
&lt;P&gt;Bon reprenons, cela ne doit pas être loin :&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Je pose un objet "Execute SQL Task", je choisi la connection, la requête SQL. Et je n'oublie pas de choisir "Full result set" comme ResultSet.&lt;/LI&gt;
&lt;LI&gt;Dans l'onglet "Result Set", je créé une entrée qui doit s'appeler 0 (ne me demander pas parquoi, c'est ainsi). Et je la mappe bien à une variable de type Objet.&lt;/LI&gt;
&lt;LI&gt;Dans l'objet ForEach, je choisit un énumérateur de type ADO (et pas variable). Je choisit l'objet contenant le RecordSet et je choisis l'option qui me convient (dans mon cas, l'utilisation de la première table).&lt;/LI&gt;
&lt;LI&gt;Enfin, je mappe les colonnes avec les variables que je veux faire varier.&lt;/LI&gt;
&lt;LI&gt;Je presse F5 et là, cela se passe quand même beaucoup mieux :)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Et voila :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478567" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pmanach/archive/tags/SSIS/default.aspx">SSIS</category></item><item><title>Utilisation manuelle d'un objet HTTP connection</title><link>http://blogs.msdn.com/pmanach/archive/2005/10/06/477814.aspx</link><pubDate>Thu, 06 Oct 2005 17:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:477814</guid><dc:creator>pmanach</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pmanach/comments/477814.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pmanach/commentrss.aspx?PostID=477814</wfw:commentRss><description>&lt;P&gt;L'objet HTTP connection (disponible dans le Connection Manager) est normalement destiné à fournir des données à un objet Web Service Task. Mais pour l'utiliser pour récupérer des données HTML, XML ou autre, pas de Task disponible en standard :(&lt;/P&gt;
&lt;P&gt;Reste alors la possibilité de prendre les choses en main. Mais la documentation en ligne est encore un peu légère à ce sujet. L'idée est de créer un objet Script Task et de le manipuler l'objet via ses méthodes.&lt;/P&gt;
&lt;P&gt;Tout d'abord, il faut créer une variable de type Object. Elle va servir à stocker une référence à un objet COM via la méthode AcquireConnection. Cette méthode prend en paramètre un objet permettant de gérer une transaction. Dans ce cas précis, Nothing est un bon choix :)&lt;/P&gt;
&lt;P&gt;Dim connection As Object = mgr.AcquireConnection(Nothing) ' mgr est de type ConnectionManager et a été récupéré via DTS.Connections&lt;/P&gt;
&lt;P&gt;Ensuite, il faut ouvrir la connexion pour récupérer les données :&lt;/P&gt;
&lt;P&gt;Dim httpConnection As HttpClientConnection = New HttpClientConnection(connection)&lt;/P&gt;
&lt;P&gt;Dim data As Byte() = httpConnection.DownloadData()&lt;/P&gt;
&lt;P&gt;Dim xmlDoc As String = System.Text.Encoding.UTF8.GetString(data)&lt;/P&gt;
&lt;P&gt;Enfin, il faut libérer la connexion :&lt;/P&gt;
&lt;P&gt;mgr.ReleaseConnection(connection)&lt;/P&gt;
&lt;P&gt;La dernière étape consiste à placer les données récupérées dans une variable du package. S'il s'agit de données XML, elles seront disponibles dans un Data Flow via un objet Xml Source (option data from variable).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=477814" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pmanach/archive/tags/SSIS/default.aspx">SSIS</category></item></channel></rss>