2017-01-09 96 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