Use os blocos IF e WHILE para controlar o fluxo do programa
Todas as linguagens de programação incluem elementos que ajudam a determinar o fluxo do programa ou a ordem em que as instruções são executadas. Embora não seja tão completo quanto linguagens como C#, T-SQL fornece um conjunto de palavras-chave de controle de fluxo que você pode usar para executar testes lógicos e criar loops contendo suas instruções de manipulação de dados T-SQL. Nesta lição, você aprenderá a usar as palavras-chave T-SQL IF e WHILE.
Compreender o controle T-SQL da linguagem de fluxo
O SQL Server fornece elementos de linguagem que controlam o fluxo de execução de programas em lotes T-SQL, procedimentos armazenados e funções de várias instruções definidas pelo utilizador. Esses elementos de controle de fluxo significam que você pode determinar programaticamente se deve executar instruções e determinar programaticamente a ordem dessas instruções que devem ser executadas.
Esses elementos incluem, mas não estão limitados a:
- Se... ELSE, que executa código baseado em uma expressão booleana.
- WHILE, que cria um loop que executa desde que uma condição seja verdadeira.
- COMEÇAR... FIM, que define uma série de instruções T-SQL que devem ser executadas em conjunto.
- Outras palavras-chave, por exemplo, BREAK, CONTINUE, WAITFOR e RETURN, que são usadas para dar suporte a operações de controle de fluxo T-SQL.
Aqui está um exemplo da instrução IF:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Utilize instruções condicionais nos seus programas usando IF... SENÃO
A estrutura IF...ELSE é usada no T-SQL para executar condicionalmente um bloco de código com base num predicado. A instrução IF determina se a próxima instrução ou bloco é executado, caso BEGIN...END seja usado. Se o predicado for avaliado como TRUE, o código no bloco será executado. Quando o predicado é avaliado como FALSO ou DESCONHECIDO, o bloco não é executado, a menos que a palavra-chave opcional ELSE seja usada para identificar outro bloco de código.
Na instrução IF a seguir, estamos perguntando ao banco de dados se o OBJECT_ID IS NULL e, em caso afirmativo, retornará a instrução PRINT. Neste exemplo, o objeto NÃO é nulo e, portanto, FALSE, o que significa que o código BEGIN/END não será executado. A instrução PRINT só será executada se o objeto não existir no banco de dados.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Devido às limitações com o código acima com apenas uma instrução IF, isso pode ser confuso. A combinação de IF e ELSE oferece mais flexibilidade com a lógica em seu código, e você pode usar várias instruções ELSE. Com o uso de ELSE, você tem outra opção de execução quando o predicado IF é avaliado como FALSE ou UNKNOWN, como no exemplo a seguir:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
Nas operações de manipulação de dados, usar IF com a palavra-chave EXISTS pode ser uma ferramenta útil para verificações de existência eficientes, como no exemplo a seguir:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Compreender ciclos usando instruções WHILE
A instrução WHILE é usada para executar código em um loop com base em um predicado. Como a instrução IF, a instrução WHILE determina se a seguinte instrução ou bloco (caso BEGIN...END seja usado) executa ou não. O loop continua a ser executado enquanto a condição for avaliada como TRUE. Normalmente, você controla o loop com uma variável testada pelo predicado e manipulada no corpo do próprio loop.
O exemplo a seguir usa a variável @empid no predicado e altera o seu valor no bloco BEGIN...END.
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Para opções extras dentro de um loop WHILE, você pode usar as palavras-chave CONTINUE e BREAK para controlar o fluxo.