Jak je uvedeno v komentářích, nemůžete zadat GO
uprostřed skupiny příkazů SQL, které jsou na sobě závislé, protože:
-
GO
označuje konec jedné zkompilované dávky a začátek další. Většina kontextů příkazů (jakoIF..ELSE
) nemůže zahrnovatGO
. A, -
GO
není 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ě.