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_cmdshell ‘dir’. 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
Par dotnet, Lundi 6 Mars 2006 à 13:32 GMT+2 dans Astuces du Mois (article, RSS)





