SQLServer / osql / isql : problème de caractères spéciaux pour lancer un script
SQL
Avec les utilitaires OSQL ou ISQL, il est possible dexécuter des script SQL en lignes de commande :
osql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Cependant, si le fichier mon_fichier_de_script.sql contient des caractères spéciaux, ça risque de planter.
En effet, loption système "Automatic ANSI to OEM conversion" est sans doute activée. De plus, il faut utiliser ISQL.
Il faut donc modifier cette clé qui se trouve en base de registre.
Pour faire propre, voici ce quil faut ajouter dans votre .bat pour que tout aille mieux :
--> Sous Windows 2003, on va mettre la valeur de la clé à OFF si elle était à ON :
FOR /F "TOKENS=3 DELIMS= " %%A IN (REG QUERY HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\DB-Lib /v AutoAnsiToOem) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\DB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)
--> Sous Windows XP, la même chose, sauf que la boucle FOR renvoie 4 entrée, il faut choisir la bonne (SKIP=3) :
FOR /F "SKIP=3 TOKENS=3 DELIMS= " %%A IN (REG QUERY HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\DB-Lib /v AutoAnsiToOem) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\DB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)
Ensuite, il faut inclure la ou les commandes ISQL UNIQUEMENT (sinon, simplement remplacer OSQL par ISQL) :
isql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Et pour finir, remettre en place la clé de la base de registre :
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\DB-Lib /v AutoAnsiToOem /t REG_SZ /d ON /f)
Notez que loption "Automatic ANSI to OEM conversion" est directement modifiable via loutil cliconfg.exe.
Article adapté de cette page en anglais