2010-07-13 4 views
23

Есть ли пустое ключевое слово оператора в T-SQL в Sql Server 2005 или новее? Что-то вроде инструкции NULL в PL/SQL.Пустой оператор в T-SQL

+9

Что вы пытаетесь достичь? – cjk

ответ

1

Нет. Нет эквивалента «Нет операции».

  • Для хранимой процедуры у вас должно быть не менее SET NOCOUNT ON.
  • Для IF/ELSE, если условие пусто опускаем

В противном случае, почему вы спрашиваете пожалуйста? Если быть точным, в чем смысл?

+1

ОК. Благодарю. Мне это нужно для моего генератора SQL. Но в любом случае кажется, что я должен удалить пустую ветвь (IF/ELSE, CASE) ранее из моих промежуточных объектов. Я обнаружил, что пустой оператор можно «эмулировать» пустым блоком (BEGIN END), но он выглядит не очень хорошо. – ternyk

6

уродливый бывает иногда. Я считаю, что их использование действительно. В длинной/сложной ветвящейся структуре решения с несколькими операторами if else некоторые из этих утверждений могут содержать условия, в которых вы специально не желаете никаких действий. Вы также не хотите, чтобы эти условия падали через по-прежнему, если выполняются определенные работы. В этом случае это действительное использование.

Вот два способа сделать это - см В и С

Declare @status as char(1) 
set @status = 'D' 

If (@status = 'A') 
    select 'Great!' 

Else if (@status = 'B') 
begin 
    if null=null select null -- predicate never resolves true 
end 

Else if (@status = 'C') 
    set @status = @status -- set a variable to itself 

Else 
    select 'Needs work!' 

Заметим, что это чрезмерно упрощенный пример. Он лучше всего используется для удобства чтения, когда условия сложны.

+0

yep Я думаю, что «if null = null select null» близок к пустым случаям // NOOP в обычном языке типа C – syclee

+0

Мне очень нравится версия 'if null = null select null', потому что она повторяется в пределах области , в случае, если это нужно делать чаще, и у него нет никаких побочных эффектов. –

7

Я также считаю, что иногда существует законное использование сценария ничего (автоматически создаваемые сценарии, например).

Хотя это старая нить, я поставлю свои два цента. Я думаю, что объявление переменной является одним из самых мягких утверждений, которые вы можете использовать. Заявление также не отражено в планах исполнения:

IF (@variable = 0) 
BEGIN 
    DECLARE @placeHolder BIT; 
END 
34

Вы можете объявить ярлык, чтобы ничего не делать.

DECLARE @value INT 

IF @value IS NULL 
BEGIN 
no_op1: 
END 
+1

Спасибо, я думаю, что это лучший способ ничего не делать, потому что он действительно ничего не делает, он только декларативный. Я собираюсь использовать это для моего автоматического перевода кода хранимой процедуры из Firebird в SQL-Server, поскольку Firebird разрешает пустые блоки, а SQL-Server - нет. По крайней мере, для случаев, когда начальный блок нельзя удалить тривиально. –

+1

Отлично. И обратите внимание, что тот же ярлык нельзя определить более одного раза .. Вот почему вы должны называть его no_op1 2 3 ... – sotn

Смежные вопросы