Jak je uvedeno v komentářích, nemůžete zadat GO uprostřed skupiny příkazů SQL, které jsou na sobě závislé, protože:
-
GOoznačuje konec jedné zkompilované dávky a začátek další. Většina kontextů příkazů (jakoIF..ELSE) nemůže zahrnovatGO. A, -
GOnení ani příkaz SQL, je to příkaz Management Studio/SQLCMD, takže nebude nikde jinde rozpoznán.
Vaše situace je běžná potřeba, ale neexistuje jediné řešení. Pro konkrétní případ, který uvádíte, je použití dynamického SQL pravděpodobně nejlepším přístupem:
IF EXISTS(select * from sys.databases where name='MyDB')
BEGIN
EXEC('
USE MyDB
EXEC(''
DROP USER [tester]
.
.
.
'')
')
END
ELSE
PRINT 'MyDB database is not available'
To využívá skutečnost, že každá dynamická SQL exekce tvoří svou vlastní dávku a obě nahrazují GO s efektem (spuštění nové dávky) a k izolaci zvláštních interakcí USE s kompilátorem. Je to samozřejmě velmi nemotorné, protože je potřeba věci po USE..GO "dvojitě zabalit" příkazy.
Všimněte si také, že kvůli tomuto dvojitému obalení jakékoli řetězce uvnitř budou muset být uvedeny čtyřnásobně.