2017-01-09 152 views
2

首先,我已经看到了这个帖子,但SO on the Topic我从来不知道,当你真正需要的,不需要BEGIN ENDSQL服务器BEGIN

拿这个例子

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语句任何好处?

+1

'BEGIN'和'END'包装*块*的代码。您的帖子中的顶部代码段是可以接受的,因为您的'IF'和'ELSE'中的语句只包含一行,但只要您有两个或更多,您就需要'BEGIN ... END'。 – Santi

+0

我将其添加为答案,并将在此删除我的评论。 – gmiley

回答

1

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

+0

你分享的帖子终于让它点击了我的头脑。从“BEGIN和END”就像C/++ /#,Java等中的{和}一样。“我需要关于{}的评论。 –

1

我喜欢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. 
*/ 
+0

在使用复杂的语句或事务组时,我意识到它的影响。谢谢你的回答。 –

+0

MSDN,真的很差的例子,因为代码中没有任何东西可以回滚 –

+0

事务仍然被创建。 – gmiley