SQLServer / osql / isql : problème de caractères spéciaux pour lancer un scriptSQL

Avec les utilitaires OSQL ou ISQL, il est possible d’exé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, l’option 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 qu’il 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 HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-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 HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-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 HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d ON /f)
Notez que l’option « Automatic ANSI to OEM conversion » est directement modifiable via l’outil cliconfg.exe.
Article adapté de cette page en anglais