bon alors je poste quand même quelques réponses
- on ne peux pas droper/recréer une table dans un seul script (il faut un "go" entre les 2 instructions)
- impossible de parentheser : un batch .sql contenant plusieurs scripts (séparés par des "Go" ) ne peut pas etre encadré par un if (...) begin ...end
if test
begin
script1
go
script2
end
go
syntaxe impossible (syntax error, genre "mot clé 'end' manquant pres de script1" )
- pas de jump non plus
if test
begin
goto :fin
end
else
begin
script1
go
script 2
end
go
:fin
syntaxe interdite (suntax error, genre "balise ':fin' non trouvée" )
- return n'aide pas
if test
return
script1
go
script 2
go
dans ce cas, return ne fait pas sortir du batch, l'execution est transmise au script suivant le script qu'on quitte, celui qui suit le return et qui finit par Go, donc on execute script 2
- entre chaque script, on perd les variables qu'on a declarées
--> soluce 1 : il faut créer un flag - variable globale qui n'est pas détruite entre les scripts - à passer entre les differents scripts du batch, pour se rappeller l'etat intial
2 methodes :
- créer une table+champ et mettre le flag dedans, et droper la table à la fin du batch
- pour SQL server y a une variable appellé transact_info, qui peut etre utilisée pour stocker un flag inter-cript (non dispo sous sybase)
un truc du genre :
DECLARE @binSession varbinary(128)
SET @binSession = CONVERT(varbinary(128), 'Failure')
SET CONTEXT_INFO @binSession
GO
--> soluce 2 :
faire un raiserror avec un errolevel > 20, boum la connection et on sort direct (ça ecrit un log donc pas terrible, mais y a apparemment possibilité de ne pas ecrire dans le log, regardez la doc de votre sgbd)
un truc du genre :
if test
raiserror ('bye bye baby',20,1) WITH LOG,NOWAIT
script1
go
script 2
go
++
ben
---------------
Reckless inferior depraved repentant ruinous foul-mouthed revered master Rotoutou the great.