Можете ли вы иметь просто комментарий в блоке SQL-оператора if?

Asked
Viewd1356

3

Я хотел бы просто добавить комментарий в блок своего оператора if, но при попытке я получаю сообщение об ошибке. Я хочу быть больше похожим на Стива МакКоннелла.

 declare @ConstraintName varchar(255)
set @ConstraintName = 'PK_Whatever'

IF LEFT(@ConstraintName, 2) = 'PK'
BEGIN
    --can't drop primary keys
END
 

Я получаю следующую ошибку:

 Incorrect syntax near 'END'.
 

Если я добавлю что-то после комментария, например, PRINT @ConstraintName, все будет нормально.

9 ответов

5

Нет, у вас не может быть пустого блока if (или блока, содержащего только комментарии).

Вы не говорите, зачем вам это нужно. Если вы просто пытаетесь закомментировать содержимое if для отладки, вы должны прокомментировать все if.

4

SELECT NULL создаст набор результатов и может повлиять на клиентские приложения. Кажется, лучше сделать что-нибудь, что не даст результата, например:

 IF LEFT(@ConstraintName, 2) = 'PK'
BEGIN
  DECLARE @Dummy bit -- Do nothing here, but this is required to compile
END
 
1

Нет, не думаю, что сможешь. Если вы хотите временно закомментировать это, вам, вероятно, нужно просто поместить / * ... * / вокруг всего оператора.

0

Не лучше ли разработать оператор SQL на основе элементов, для которых вы хотите отказаться от ограничений? Итак, если вы хотите удалить эту возможность, тогда

 If left(@constraintname,2 <> 'PK'
BEGIN
     -- Drop your constraint here
     ALTER TABLE dbo.mytable DROP constraint ... -- etc
END
 
1

Поскольку у вас не может быть «пустых» блоков (спасибо Чарльзу Грэму), я помещу комментарий над оператором if для условного обозначения (спасибо BlackWasp), а затем оставлю комментарий в начале Блок ..end, описывающий фиктивное объявление (спасибо GiLM).

Как вы думаете, так я должен комментировать код?

 declare @ConstraintName varchar(255)
set @ConstraintName = 'PK_Whatever'

--can't drop primary keys
IF LEFT(@ConstraintName, 2) = 'PK'
BEGIN
    --do nothing here
    DECLARE @Dummy bit --required to compile
END
 
1

Это не комментарий. Дело в том, что у вас пустой блок if. У вас должно быть хотя бы одно утверждение. Лучше всего использовать распечатку.

3

Я не могу сказать наверняка в SQL Server, но в Oracle PL / SQL вы бы поместили оператор NULL в блок, который не хотите ничего делать:

 BEGIN
  -- This is a comment
  NULL;
END
 
0

Я знаю, что он не отвечает на ваш исходный вопрос о том, можно ли разместить просто комментарий внутри блока, но почему бы не инвертировать условное выражение, чтобы блок выполнялся только в случае <> 'PK'?

 -- drop only if not primary
IF LEFT (@ConstraintName, 2) <> 'PK'
BEGIN
    --do something here
END