оператор выбора в запросе не компилируется - PullRequest
1 голос
/ 10 ноября 2011

этот простой код приводит к тому, что sp не компилируется со всеми видами ошибок: все, что я пытаюсь сделать, это проверить эту таблицу на сайте клиента, если она пуста, то мы не отображаем приложение.

if (select count(*) from oen.dbd_c_modules) > 0 begin

insert into [OEN].[DBD_C_MODULES]([MODULE_ID], [DESCRIPTION], ACTIVE)
VALUES(11,'Medications',1)


end

go

ошибка: Сообщение 102, уровень 15, состояние 1, процедура DBD_GET_MEDICINE, строка 24 Неверный синтаксис рядом с «концом». Msg 137, уровень 15, состояние 2, строка 15 Необходимо объявить скалярную переменную "@DATEFROM". Сообщение 137, уровень 15, состояние 2, строка 16 Необходимо объявить скалярную переменную "@DATEFROM". Сообщение 137, уровень 15, состояние 2, строка 39 Необходимо объявить скалярную переменную "@FACILITYKEY". Сообщение 156, уровень 15, состояние 1, строка 52 Неверный синтаксис рядом с ключевым словом «И». Сообщение 156, уровень 15, состояние 1, строка 56 Неверный синтаксис рядом с ключевым словом «И».

код: здесь: http://www.mediafire.com/?16qr8xaszq025b6

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Я думаю, что нам нужно увидеть весь код - переменные списка ошибок, которые не входят во фрагмент, а ключевое слово GO не является частью синтаксиса TSQL для хранимой процедуры, это маркер конца пакета для SSMS.(Это ключевое слово GO может вызывать ваши проблемы, если оно действительно существует)

Глядя на полный код, который вы разместили, вы поместили ключевые слова GO в хранимую процедуру, которая не является допустимым синтаксисом TSQL, что 'заканчивает пакет, который вы отправляете на сервер, поэтому сокращает хранимую процедуру пополам.Затем приходят ошибки, он жалуется на ключевое слово GO, затем пытается запустить второй отправляемый вами пакет (вторую половину процедуры), после чего он не знает, какие переменные вы объявили, поэтому выдает ошибкина всякий случай.

Просто удалите 'GO' из своего кода и попробуйте скомпилировать его снова.

1 голос
/ 10 ноября 2011

Вам не нужно, если (...):

INSERT INTO [OEN].[DBD_C_MODULES]([MODULE_ID], [DESCRIPTION], ACTIVE)
VALUES(11,'Medications',1)
WHERE (select count(*) from oen.dbd_c_modules) > 0
  ;

[лично я не одобряю некоррелированный подзапрос, но это другой вопрос]

РЕДАКТИРОВАТЬ: Альтернативная формулировка:

INSERT INTO [OEN].[DBD_C_MODULES]([MODULE_ID], [DESCRIPTION], ACTIVE)
VALUES(11,'Medications',1)
WHERE NOT EXISTS (select * from oen.dbd_c_modules)
  ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...