【问题标题】:SQL Server BEGINSQL Server 开始
【发布时间】:2017-01-09 15:23:50
【问题描述】:

首先,我看到了这个帖子SO on the Topic,但我不知道你什么时候真正需要和不需要BEGIN END

举个例子

  If (@pInsLName <> 'null')
    Select @pInsLNameact = Cast (@pInsLName As VarChar(60)) 
  Else
    Select @pInsLNameact = Null

或者

  If (@pInsLName <> 'null')
    Begin
      Select @pInsLNameact = Cast (@pInsLName As VarChar(60))    
    End
  Else
    Begin
      Select @pInsLNameact = Null
    End

在上面的示例中,使用与不使用 BEGIN 和 END 语句有什么好处?

【问题讨论】:

  • BEGINEND 包装代码。您帖子中的顶部 sn-p 是可以接受的,因为您的 IFELSE 中的语句仅包含一行,但是一旦您有两个或更多,您将需要 BEGIN...END

标签: sql sql-server-2012


【解决方案1】:

我认为您链接到的问题/答案已经很好地解释了它。还有this entry。基本上BEGINEND 表示一个语句块。对于IF,它将语句组合在一起,以便它们都作为语句的IFELSE 部分中定义的条件的一部分执行。

【讨论】:

  • 你分享的帖子终于在我的脑袋里得到了点击。来自帖子“BEGIN 和 END 就像 C/++/#、Java 等中的 { 和 }”。我需要关于 { } 的评论。
【解决方案2】:

我喜欢下面来自MSDN的例子:

如果您不包含BEGINEND,则ROLLBACK TRANSACTION 语句和PRINT 语句都将执行。

USE AdventureWorks2012;  
GO  
BEGIN TRANSACTION;  
GO  
IF @@TRANCOUNT = 0  
BEGIN  
    SELECT FirstName, MiddleName   
    FROM Person.Person WHERE LastName = 'Adams';  
    ROLLBACK TRANSACTION;  
    PRINT N'Rolling back the transaction two times would cause an error.';  
END;  
ROLLBACK TRANSACTION;  
PRINT N'Rolled back the transaction.';  
GO  
/*  
Rolled back the transaction.  
*/  

【讨论】:

  • MSDN,真的很糟糕的例子,因为代码中没有任何东西可以回滚
  • 事务仍在创建中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多