T-SQL中的空语句

ter*_*nyk 28 t-sql sql-server

Sql Server 2005或更新版本的T-SQL中是否有空语句关键字?像PL/SQL中的NULL语句.

Mar*_*ith 44

您可以声明标签不执行任何操作.

DECLARE @value INT

IF @value IS NULL
BEGIN
no_op1: 
END
Run Code Online (Sandbox Code Playgroud)

  • 大.请注意,相同的标签不能定义多次.这就是为什么你应该将其命名为no_op1 2 3 ... (2认同)
  • 作为参考,MSDN明确表示不允许空BEGIN ... END块:http://msdn.microsoft.com/en-us/library/ms189079(sql.90).aspx (2认同)

JM.*_*JM. 11

丑陋有时发生.我相信他们是有效的用途.在具有多个if else语句的冗长/复杂的决策分支结构中,其中一些语句可能包含您特别不希望采取任何操作的条件.某些工作已完成,您也不希望这些条件通过默认情况下执行.在这种情况下,它是一个有效的用途.

这有两种方法 - 见B和C.

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!'
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个过于简化的示例.当条件复杂时,最好用于可读性.

  • @LukasEder`如果null> null`会更安全.如果`SET ANSI_NULLS OFF`,`null = null`可以解析为`true` (2认同)
  • @MartinSmith:很好听!当然,`if 1 = 0`可能更直接.`null> null`可能需要额外的注释来解释看起来很不寻常的东西 (2认同)

Mic*_*art 7

我也相信有时候合法使用无脚本(例如自动生成的脚本).

虽然这是一个老线程,但我会把我的两分钱.我认为声明变量是您可以使用的最良性的陈述之一.该声明甚至没有出现在执行计划中:

IF (@variable = 0)
BEGIN
    DECLARE @placeHolder BIT;
END
Run Code Online (Sandbox Code Playgroud)


gbn*_*gbn 1

不。不存在“无操作”等价物。

  • 对于存储过程,您至少有SET NOCOUNT ON.
  • 对于 an IF/ELSE,如果条件为空则忽略它