Как единый запрос, синтаксис, который вы разместили, отлично работает. Вы не включили END
в свой BEGIN
блок в сообщении, но мы знаем, что проблема не в этом, потому что в сообщении об ошибке должен был быть другой номер строки.
Следующее единственное выражение будет работать:
(мне нравится делать отступ для BEGIN, но это не влияет на выполнение)
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'control_forecastscenario'
AND TABLE_SCHEMA = 'rvfc')
BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
[Scenario] [varchar](255) NULL,
[Active] [varchar](255) NULL
)
END
Также обратите внимание, что я пропустил ON [PRIMARY]
, поскольку это группа файлов по умолчанию, и если вы не управляете несколькими файлами групп, то лучше не включать ссылки на них в базу кода.
Единственный способ воссоздать вашу ошибку - это попытаться выполнить ее как отдельные пакетные вызовы. Это может произойти, если ваша бизнес-логика выполняет сценарий по частям или построчно, или если вы каким-то образом построили запрос таким образом, что терминатор пакета, например GO
или ;
, был введен в сценарий.
Следующее создаст вашу ошибку.
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'control_forecastscenario'
AND TABLE_SCHEMA = 'rvfc')
Сообщение 102, уровень 15, состояние 1, строка 4
Неправильный синтаксис рядом с ")".
Та же ошибка возникнет, если в исходный скрипт ввести символьное двоеточие.
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'control_forecastscenario'
AND TABLE_SCHEMA = 'rvfc')
;
BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
[Scenario] [varchar](255) NULL,
[Active] [varchar](255) NULL
)
END
При рассмотрении некоторых других комментариев существование схемы rvfc
здесь не ставится под сомнение, равно как и другие распространенные проблемы синтаксиса, потому что они могут вызывать разные сообщения об ошибках, подобные этому:
Сообщение 2760, уровень 16, состояние 1, строка 7
Указанное имя схемы rvfc либо не существует, либо у вас нет разрешения на его использование.
Если вы выполнили этот оператор, опуская END
, вы увидите другой номер строки, но такое же сообщение:
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'control_forecastscenario'
AND TABLE_SCHEMA = 'rvfc') BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
[Scenario] [varchar](255) NULL,
[Active] [varchar](255) NULL
)
Сообщение 102, уровень 15, состояние 1, строка 8 Неправильный синтаксис рядом с ')'.
Сообщение такое же, потому что блок BEGIN
требует закрытия с помощью END
, что делает весь блок BEGIN
недействительным. Итак, )
был последним допустимым символом в сценарии, так что это последнее место, где SQL может сообщить об ошибке.
Пожалуйста, опубликуйте свой код, который выполняет скрипт, для получения дополнительной помощи, в противном случае этот пост должен быть закрыт как невоспроизводимый.
17.04.2021