2017-01-09 1 views
2

Во-первых, я видел это сообщение SO on the Topic, но я никогда не знал, когда вам действительно нужно и не нужно BEGIN END.SQL Server 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 

В приведенном выше примере, есть ли преимущество использования по сравнению с не использованием НАЧАТЬ и утверждения END?

+1

'BEGIN' и' END' wrap * blocks * кода. Верхний фрагмент в вашем сообщении является приемлемым, потому что утверждения в ваших 'IF' и' ELSE' содержат только одну строку, однако, как только у вас есть два или более, вам понадобится 'BEGIN ... END'. – Santi

+0

Я добавил его в качестве ответа и удалю свой комментарий здесь. – gmiley

ответ

1

Я думаю, что связанный с вами вопрос/ответ объясняет это достаточно хорошо. Существует также this entry. В основном BEGIN и END обозначают блок утверждений. В случае с IF он группирует операторы вместе, чтобы все они выполнялись как часть условия, определенного в частях инструкции или ELSE.

+0

сообщение, которое вы поделили, наконец, заставило его щелкнуть по моей толстой голове. Из сообщения «BEGIN и END такие же, как {и} в C/++/#, Java и т. Д.» Мне нужен комментарий о {}. –

1

Мне нравится следующий пример из MSDN:

Если вы не включаете BEGIN и END оба 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

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