Seperti yang disebutkan di komentar, Anda tidak dapat memasukkan GO
di tengah sekelompok pernyataan SQL yang saling bergantung karena:
-
GO
menunjukkan akhir dari satu kumpulan yang dikompilasi dan awal dari kumpulan berikutnya. Sebagian besar konteks pernyataan (sepertiIF..ELSE
) tidak dapat menjangkauGO
. Dan, -
GO
bahkan bukan pernyataan SQL, ini adalah perintah Management Studio/SQLCMD, sehingga tidak akan dikenali di tempat lain.
Situasi Anda adalah kebutuhan bersama, tetapi tidak ada satu solusi pun. Untuk kasus spesifik yang Anda daftarkan, menggunakan SQL Dinamis mungkin merupakan pendekatan terbaik:
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'
Ini memanfaatkan fakta bahwa eksekusi SQL Dinamis masing-masing merupakan kumpulannya sendiri untuk kedua pengganti GO
s (memulai batch baru) dan untuk mengisolasi interaksi khusus USE
dengan kompiler. Tentu saja sangat kikuk karena kebutuhan untuk "membungkus dua kali" hal-hal setelah USE..GO
perintah.
Perhatikan juga bahwa karena pembungkusan ganda ini, string apa pun di dalamnya harus dikutip empat kali lipat.