{"id":17,"date":"2007-11-15T19:27:33","date_gmt":"2007-11-15T17:27:33","guid":{"rendered":"http:\/\/mayeur.com\/wordpressfr\/?p=17"},"modified":"2007-11-20T14:09:27","modified_gmt":"2007-11-20T12:09:27","slug":"ssis-et-les-upserts","status":"publish","type":"post","link":"https:\/\/mayeur.com\/wordpressfr\/ssis-et-les-upserts\/","title":{"rendered":"SSIS et les UPSERTs"},"content":{"rendered":"<p>L\u2019UPSERT est une fonctionnalit\u00e9 couramment utilis\u00e9e dans les ETL \u00e0 mis chemin entre l\u2019instruction INSERT et UPDATE. Elle consiste \u00e0 ins\u00e9rer une ligne de donn\u00e9es si celle-ci n\u2019existe pas en base, ou sinon \u00e0 la mettre \u00e0 jour. Le SQL \u00ab officiel \u00bb, ainsi que SQL Server ne proposent pas d\u2019op\u00e9rateur d\u00e9di\u00e9 \u00e0 cette op\u00e9ration. Il semblerait que SQL Server 2008 ait ce type d\u2019op\u00e9rateur en gestation, mais ce n\u2019est pas l\u2019objet de ce post.<br \/>\nLes m\u00e9thodes de r\u00e9alisation d\u2019UPSERT font r\u00e9guli\u00e8rement l\u2019objet d\u2019analyse sur le web. Apr\u00e8s moult lectures, et essais, voici ma m\u00e9thode, efficace dans la grande majorit\u00e9 des cas.<br \/>\nL\u2019exemple fait r\u00e9f\u00e9rence \u00e0 mon pr\u00e9c\u00e9dent article sur \u00ab <a href=\"http:\/\/mayeur.com\/wordpressfr\/?p=16\">SSIS et les mises \u00e0 jour de masse <\/a>\u00bb.<br \/>\nLe principe est de disposer d\u2019un flux de donn\u00e9es r\u00e9alisant<br \/>\n\u2022 l\u2019insertion de masse des lignes ad\u00e9quates,<br \/>\n\u2022 l\u2019insertion en table temporaire des lignes \u00e0 modifier<br \/>\nPuis une requ\u00eate SQL pour r\u00e9aliser la mise \u00e0 jour par jointure (voir mon article \u00ab SSIS et les mises \u00e0 jour de masse).<br \/>\nVoici le flux de contr\u00f4le :<br \/>\n<a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img1.jpg\" title=\"img1.jpg\" class=\"thickbox\"><img decoding=\"async\" src=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img1.jpg\" alt=\"img1.jpg\" title=\"img1.jpg\" \/><\/a><\/p>\n<p>Voici le flux de donn\u00e9es associ\u00e9 :<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img2.jpg\" title=\"img2.jpg\" class=\"thickbox\"><img decoding=\"async\" src=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/thumbs\/thumbs_img2.jpg\" alt=\"img2.jpg\" title=\"img2.jpg\" \/><\/a><\/p>\n<p>On retrouve la \u00ab recherche \u00bb du nom et pr\u00e9nom. Il est important de noter que la gestion des erreurs de cette recherche est configur\u00e9e sur \u00ab Ignorer l\u2019\u00e9chec \u00bb de la fa\u00e7on suivante:<br \/>\n<a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img3.jpg\" title=\"img3.jpg\" class=\"thickbox\"><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img3.jpg\" title=\"img3.jpg\" class=\"thickbox\"><img decoding=\"async\" src=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/thumbs\/thumbs_img3.jpg\" alt=\"img3.jpg\" title=\"img3.jpg\" \/><\/a><\/p>\n<p>Cela signifie que si la recherche de la cl\u00e9 primaire n\u2019aboutie pas, celle-ci est positionn\u00e9e \u00e0 la valeur NULL dans le flux de donn\u00e9es.<br \/>\nD\u00e8s lors, il est possible de d\u00e9partager les lignes \u00e0 ins\u00e9rer ou \u00e0 mettre \u00e0 jour avec un composant de \u00ab Fractionnement conditionnel \u00bb de la sorte :<\/p>\n<p><a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img4.jpg\" title=\"img4.jpg\" class=\"thickbox\"><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/img4.jpg\" title=\"img4.jpg\" class=\"thickbox\"><img decoding=\"async\" src=\"http:\/\/mayeur.com\/wordpressfr\/wp-content\/gallery\/art17\/thumbs\/thumbs_img4.jpg\" alt=\"img4.jpg\" title=\"img4.jpg\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u2019UPSERT est une fonctionnalit\u00e9 couramment utilis\u00e9e dans les ETL \u00e0 mis chemin entre l\u2019instruction INSERT et UPDATE. Elle consiste \u00e0 ins\u00e9rer une ligne de donn\u00e9es si celle-ci n\u2019existe pas en base, ou sinon \u00e0 la mettre \u00e0 jour. Le SQL \u00ab officiel \u00bb, ainsi que SQL Server ne proposent pas d\u2019op\u00e9rateur d\u00e9di\u00e9 \u00e0 cette op\u00e9ration. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-etl"],"_links":{"self":[{"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":0,"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"wp:attachment":[{"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mayeur.com\/wordpressfr\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}