T-SQL : Boucler sur un curseur

Etant donné que j’oublie à chaque fois cette structure de code, je la placeune fois pour toute :

DECLARE @ma_var1 VARCHAR(255), @ma_var2 VARCHAR(255)
DECLARE mon_curseur CURSOR FOR
   SELECT col1, col2 FROM ma_table
OPEN mon_curseur
FETCH NEXT FROM mon_curseur INTO @ma_var1, @ma_var2
WHILE @@FETCH_STATUS = 0
BEGIN
   FETCH NEXT FROM mon_curseur INTO @ma_var1, @ma_var2
END
CLOSE mon_curseur
DEALLOCATE mon_curseur

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