Можете ли вы просто оставить комментарий в блоке своего SQL-оператора if? - PullRequest
3 голосов
/ 26 сентября 2008

Я хотел бы просто добавить комментарий в блок моего оператора 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 голосов
/ 26 сентября 2008

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

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

4 голосов
/ 26 сентября 2008

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

IF LEFT(@ConstraintName, 2) = 'PK'
BEGIN
  DECLARE @Dummy bit -- Do nothing here, but this is required to compile
END
3 голосов
/ 26 сентября 2008

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

BEGIN
  -- This is a comment
  NULL;
END
2 голосов
/ 05 ноября 2013

Полезные советы: Как ничего не делать в SQL Server

BEGIN
  DONOTHING:
END

Итак, вы просто определяете метку.

1 голос
/ 26 сентября 2008

Поскольку у вас не может быть «пустых» блоков (спасибо Чарльзу Грэму), я помещу комментарий над оператором 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 голос
/ 26 сентября 2008

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

1 голос
/ 26 сентября 2008

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

0 голосов
/ 31 января 2009

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

-- drop only if not primary
IF LEFT (@ConstraintName, 2) <> 'PK'
BEGIN
    --do something here
END
0 голосов
/ 26 сентября 2008

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

If left(@constraintname,2 <> 'PK'
BEGIN
     -- Drop your constraint here
     ALTER TABLE dbo.mytable DROP constraint ... -- etc
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...