[SQL Server] Lancer un package ssis depuis une procédure stockée
Voila le problème : je veux transférer des data depuis une source de données Access envoyée par mon fournisseur vers ma base SQL au travers d’une procédure stockée que j’appelle à chaque fois que mon fournisseur me fait une livraison.
Ainsi soit ma procédure stockée peut être appelée depuis mon ERP soit je l’appelle depuis SQL.
La première chose à faire est d’importer mon package au sein du moteur SSIS de SQL serveur.
Pour ça je vais vérifier que mon service SSIS est en fonctionnement et en démarrage automatique dans la console configuration de SQL Server.
Si ce n’est pas le cas, je vais dans les propriétés de sql server integration services, dans l’onglet service le seul champ modifiable est celui qui me permet de passer en mode démarrage automatique.
Dans l’onglet ouvrir une session, je peux choisir le compte d’exécution et démarrer mon service sur ce compte.
Maintenant que les vérifications sont faites, je vais me connecter au moteur SSI grâce à SQL server Management studio. Pour ce faire je vais dans l’explorateur d’objets et je déploie la liste déroulante connexion.
Je vais choisir Intégration services vous l’aviez deviné ! Et je me connecte.
Une fois connecté, j’ai l’affichage suivant :
Donc ici je peux me connecter à mes bases de données ou à mes packages si j’en ais, mais là dans le répertoire File System, je n’en ai pas pour l’instant.
Je vais donc en importer un en faisant un clic droit sur le répertoire File System et « Importer un package ».
L’assistant suivant s’affiche et je vais le paramétrer de la façon suivante :
Mon package est dans un répertoire donc je vais sélectionner système de fichier.
Je vais renseigner le chemin jusqu’à mon fichier.DTSX et dans le champ nom du package si je fais juste un clic il reprend le nom du package tel qu’il était nommé lors de sa construction.
Une fois validé je vois que mon package se trouve désormais dans mon répertoire File System sur SQL Server.
Il ne me reste plus qu’à créer ma procédure stockée qui lancera le package DTSX.
CREATE PROCEDURE [dbo].[SP_ImporterFormation]
AS
SET NOCOUNT ON
-- lancement du package
DECLARE @chaine varchar(2048)
SELECT @chaine='DTEXEC /DTS "\File System\EuriLyre-ImportFormation" /SERVER "." /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V'
EXEC master..xp_cmdshell @chaine
-- ci dessous je peut rajouter des traitements si necessaire
Ici il est important de comprendre que
- c’est la variable @chaine qui contient la ligne de commande
-Dans vos développements seul
"\File System\EuriLyre-ImportFormation" change.
-On exécute une commande
xp_cmdshell donc il faut que ce dernier soit activé dans la surface d’exposition des fonctionnalités pour ça on va dans configuration de la surface d’exposition puis dans configurer la surface d’exposition des fonctionnalités.