DMI's Blog sur les technos .NET(dotnet) et J2EE

Comment exécuter un package DTS à partir d’une procédure stockée ?

 

Malheureusement aucunes commandes T-SQL ne permettent d’exécuter un dts, mais il existe cependant deux « solutions de contournement » :

 

  • Passer par xp_cmdshell and dtsrun
  • Utilisez les procedures stockées OLE (sp_OACreate, sp_OAGetErrorInfo, …)

 

Dans cette première partie nous allons utiliser la première méthode car plus facile à mettre en œuvre bien que plus contraignante en terme de gestion de sécurité

 

DTSRUN est un utilitaire qui vous permet d’exécuter un lot, ou le planifier sans utiliser le fameux Microsoft Management Console (MMC). Pour exécuter cette commande vous devez bien sûr avoir MS SQL Server sur votre machine.

Lancer l’invite de commande (démarrer->exécuté puis tapez « cmd ») puis tapez dtsrun pour avoir l’aide concernant l’utilisation de celle-ci.

 

Syntaxe

 

dtsrun
[/?] |
[
    [
        /[~]S server_name[\instance_name]
        { {/[~]U user_name [/[~]P password]} | /E }
    ]
    {    
        {/[~]N package_name }
        | {/[~]G package_guid_string}
        | {/[~]V package_version_guid_string}
    }
    [/[~]M package_password]
    [/[~]F filename]
    [/[~]R repository_database_name]
    [/A global_variable_name:typeid=value]
    [/L log_file_name]
    [/W NT_event_log_completion_status]
    [/Z] [/!X] [/!D] [/!Y] [/!C]
]

 

Utilitaire d’aide à la génération de la commande

 

Il existe un utilitaire qui permet de générer graphiquement la commande nécessaire pour l’exécution d’un lot donnée.

Supposons que nous avons besoin de générer la commande d’exécution du lot suivant

 

Nom : abcdTest

Server : MyServer

User name = sa

Pwd = pwd

Variable globale : NBLigne avec comme valeur 780

Fichier journal : C:\Temp\log.txt

 

Se qu’il faut faire :

 

  • Tapez en ligne de commande «dtsrunui » puis à l’ouverture de l’utilitaire graphique entrez vos paramètres (Emplacement, Nom du serveur, utilisateur, mot de passe puis le nom du lot).
  • Cliquez sur « Avancé » puis choisissez votre variable globale puis entrez la valeur voulue.
  • Choisissez le chemin de votre fichier de log
  • Cliquez sur « Générer… »
  • Copiez le résultat généré

 

NB : cet utilitaire vous donne aussi la possibilité de planifier l’exécution de votre lot.

 

Le résultat doit être semblable à quelque chose comme :

 

DTSRun /S "MyServer " /U "sa" /P "pwd" /N "abcdTest " /G "{5360FD4D-5326-4640-B06C-31E8652F48B3}" /L "C:\Temp\log.txt" /A "NBLignes":"780"="78" /W "0"

 

Vous pouvez tester votre commande en l’exécutant en ligne de commande

 

La seconde étape consiste à exécuter cette commande dans MS SQL Server.

MS SQL Server offre la possibilité d’exécuter des lignes de commande grâce à la procédure stockée xp_cmdshell (à utiliser avec prudence et parcimonie) qui se trouve dans la base master.

 

Ouvrez l’analyseur de requêtes puis tapez exec master..xp_cmdshelldir. Cela aura pour effet de lister les fichiers situés sur le disque dur de la machine sur laquelle SQL Server est installé.

 

Pour exécuter votre commande créez une procédure stockée contenant le code suivant :

 

DECLARE @CMD varchar(1000)

 

SET @CMD = DTSRun /S "MyServer " /U "sa" /P "pwd" /N "abcdTest " /G "{5360FD4D-5326-4640-B06C-31E8652F48B3}" /L "C:\Temp\log.txt" /A "NBLignes":"780"="78" /W "0"

exec master..xp_cmdshell @CMD

 

Et voilà, c’est partiiiiiiii

aucun commentaire - aucun rétrolien