У меня возникают проблемы с использованием USE Database; GO
, когда оператор находится в инструкции if..else. Я предполагаю, что USE Database; GO
должен был использоваться в начале скрипта или SQL-оператора.SQL Server: проблема с приоритетом базы данных USE
Возможно, кто-то может помочь мне придумать другой способ приблизиться к этому, что я пытаюсь сделать, проверить, существует ли конкретная база данных, если она удаляет определенный пользовательский доступ из этой конкретной базы данных. То, как я думал сделать это следующим образом ...
IF EXISTS(select * from sys.databases where name='MyDB')
BEGIN
USE MyDB
GO
DROP USER [tester]
.
.
.
END
ELSE
PRINT 'MyDB database is not available'
Я рубил SQL скрипта для уменьшенной версии, так что я не загромождать этот пост так быть в курсе есть какая-то другая логика, которая была оставлены после DROP USER
Редакции: Я пробовал различные способы, чтобы проверить, существует ли дб, так что каждый знает пробовал
if db_id('MyDB') is not null
or
if object_id('MyDB', 'U')
Но, это всегда идет непосредственно use MyDb
первых и I не знаю, почему и как его обойти.
GO [не является оператором T-SQL] (http://technet.microsoft.com/en-us/library/ms188037.aspx). Это всего лишь команда утилиты front-end, которую вы используете, чтобы отправить пакет заявлений, которые вы ввели до этого момента. Вот почему он ломается, если он находится между BEGIN и END - он заканчивает партию в середине блока. –
@MattGibson Я вынул Go, добавил точку с запятой сразу после 'MyDB', и это не сработало. Вот почему я перешел на переполнение стека – Abuelo
Точно, что вы испытываете? Возвращает ли запрос EXISTS() значение true? Что означает «всегда идет прямо на использование MyDb»? – Charleh