Usar os blocos IF e WHILE para controlar o fluxo do programa

Concluído(a)

Todas as linguagens de programação incluem elementos que ajudam você a determinar o fluxo do programa ou a ordem na qual as instruções são executadas. Embora não seja tão completo quanto linguagens como C#, o T-SQL fornece um conjunto de palavras-chave de controle de fluxo que você pode usar para executar testes lógicos e criar loops que contêm suas instruções de manipulação de dados T-SQL. Nesta lição, você aprenderá a usar o T-SQL IF e WHILE as palavras-chave.

Entender o controle T-SQL da linguagem de fluxo

O SQL Server fornece elementos de linguagem que controlam o fluxo de execução do programa em lotes T-SQL, procedimentos armazenados e funções definidas pelo usuário de várias instruções. Esses elementos de controle de fluxo significam que você pode determinar programaticamente se as instruções devem ser executadas e determinar programaticamente a ordem dessas instruções que devem ser executadas.

Esses elementos incluem, mas não se limitam a:

  • IF...ELSE, que executa código com base em uma expressão booliana.
  • WHILE, que cria um loop que executa fornecendo uma condição é verdadeiro.
  • BEGIN...END, que define uma série de instruções T-SQL que devem ser executadas juntas.
  • Outras palavras-chave, por exemplo, BREAK, WAITFOR CONTINUEe 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

Usar a lógica condicional nos seus programas usando IF...ELSE

A IFestrutura ...ELSE é usada no T-SQL para executar condicionalmente um bloco de código com base em um predicado. A IF instrução determina se a instrução ou o bloco a seguir (se BEGIN...END for usado) é executado. Se o predicado for avaliado como TRUE, o código no bloco será executado. Quando o predicado é avaliado como FALSE ou UNKNOWN, 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 a seguir IF , estamos perguntando ao banco de dados se o OBJECT_ID IS NULLe, em caso afirmativo, retornar a PRINT instrução. Neste exemplo, o objeto NÃO é nulo e, portanto, FALSE, o que significa que o BEGIN/END código não será executado. A PRINT instrução 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. IF Combinar e ELSE oferecer mais flexibilidade com a lógica em seu código e você pode usar várias ELSE instruções. Com o uso de, você tem outra opção de ELSEexecução quando o IF predicado é 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;

Dentro de 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;

Noções básicas sobre o loop usando as instruções WHILE

A WHILE instrução é usada para executar código em um loop com base em um predicado. Assim como a IF instrução, a instrução WHILE determina se a instrução ou o bloco a seguir (se BEGIN...END for usado) é executado. O loop continua a ser executado desde que a condição seja avaliada como TRUE. Normalmente, você controla o loop com uma variável testada pelo predicado e manipulada no próprio corpo do loop.

O exemplo a seguir usa a @empid variável no predicado e altera seu valor no BEGIN...END bloco. SELECT é usado aqui (em vez de SET) para demonstrar a leitura de um valor de coluna de um resultado de consulta em uma variável:

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 em um WHILE loop, você pode usar as palavras-chave e BREAK as CONTINUE palavras-chave para controlar o fluxo.