Você está na página 1de 5

Programando no SQL Server

Neste artigo veremos os conceitos, sintaxes e exemplos


prticos sobre os comandos utilizados para programar
no SQL Server.
Introduo O uso da programao no SQL Server envolve a criao e uso de
variveis, o uso de elementos de controle de fluxo e tambm o uso de Stored
Procedures (que sero abordados no prximo artigo do curso). Assim conseguimos
incluir uma determinada lgica em nossas querys.
Variveis de Usurio Uma varivel local do Transact SQL um objeto nos scripts
e batches que mantm um valor de dado. Atravs do comando DECLARE, podemos
criar variveis locais, sendo feito isso no corpo de uma procedure ou batch.
Podemos ver abaixo, na Listagem 01, dois exemplos de declaraes de variveis,
ambos esto corretos, depende do programador qual ir utilizar.
Listagem 01 Declarao de Variveis Locais
--Exemplo 1
DECLARE @IdUsuario AS INT, @Nome AS VARCHAR(50), @Idade AS SMALLINT
--Exemplo 2
DECLARE @IdUsuario AS INT
DECLARE @Nome AS VARCHAR(50)
DECLARE @Idade AS SMALLINT

Em ambos os exemplos temos o uso do caractere coringa @ antes da varivel. Este


um padro para declarar variveis e deve ser seguido pelos programadores. Podemos
notar ainda que cada varivel declarada tem seu datatype atribudo.
Obs.: Lembrando que o AS um alias e seu uso opcional.
possvel atribuir valores para cada uma das variveis. Para isso, usamos o comando
SET ou o SELECT, como vemos no exemplo da Listagem 02.
Listagem 02 Atribuindo valores para as variveis declaradas
DECLARE @IdUsuario AS INT, @Nome AS VARCHAR(50), @Idade AS SMALLINT
SET @IdUsuario = 1
SELECT @Nome = ColunaNome FROM Tabela @Idade = ColunaIdade FROM Tabela

Seja com SET ou SELECT, conseguimos atribuir valor as variveis, depende da


necessidade de cada desenvolvedor.
Controle de Fluxo Assim como muitas linguagens de programao utilizam
operadores de condio, o SQL no poderia ficar de fora. Ele trabalha com esses
elementos, tambm denominado de controle de fluxo, permitindo assim ao
desenvolvedor criar lgicas para as mais variadas situaes e regras de negcio de seu
sistema. Os elementos de controle de fluxo que iremos ver so, nessa ordem,
BEGIN/END, IF/ELSE, CASE/WHEN/THEN/END, WHILE e o TRY...CATCH.
BEGIN/END Os elementos BEGIN e END tem o objetivo de iniciar e finalizar,
respectivamente, um bloco de comandos, de maneira que este possa ser posteriormente
executado. Podemos aninhar blocos de comando utilizando estes elementos.
Caso seja executado um bloco de comandos logo aps a realizao de um teste de
condio, os elementos BEGIN e END, so usados logo aps um comando IF ou
WHILE. Veremos mais a frente exemplos com o uso destes elementos.
IF/ELSE Os elementos IF e ELSE so usados para testar condies quando um
comando Transact-SQL executado. O IF e ELSE funcionam similarmente aos
comandos de mesmo nome usados em linguagens como C# por exemplo, para testar
condies de execuo de comandos.
Confira abaixo a sintaxe do IF e ELSE no SQL:
IF Expressao_Booleana
{ comando_sql | bloco_comando }
[ ELSE
{ comando_sql | bloco_comando } ]
Sendo que o argumento Expressao_Booleana pode retornar TRUE ou FALSE. Se na
expresso booleana houver um comando SELECT, ele deve ser colocado entre
parnteses. J o comando_sql | bloco_comando representa um comando TransactSQL ou um agrupamento de comandos.
Na Listagem 03 temos um exemplo com os elementos BEGIN/END em conjunto com
IF/ELSE.
Listagem 03 Exemplo com IF/ELSE e BEGIN/END
IF @IdUsuario > 0
BEGIN
SELECT IdUsuario
FROM Clientes

WHERE IdUsuario = @IdUsuario


END
ELSE
BEGIN
SELECT TOP 1 @IdUsuario = IdUsuario
FROM Clientes
END

CASE/WHEN/THEN/END O elemento CASE utilizado para conferir uma lista


de condies e, ento, retornar uma entre vrias expresses de resultado possveis.
CASE, que usado em conjunto com o comando SELECT, til quando a inteno
a de evitar que sejam criados comandos IF aninhados. Ele considerado como
uma alternativa ao IF. Dois formatos podem ser designados ao comando CASE: a
funo simples e a funo pesquisada. Com a primeira, o resultado obtido por
meio da comparao de uma expresso com uma srie de expresses simples. Na
segunda funo, obtido um resultado especfico a partir de um conjunto de
expresses booleanas.

Na Listagem 04 pode ser visto um exemplo prtico de uso do CASE.


Listagem 04 Exemplo de uso do elemento CASE em um SELECT
SELECT IdProduto, Nome, Tipo =
CASE
WHEN 'A' THEN 'Produto Nacional'
WHEN 'B' THEN 'Produto dos Estados Unidos'
WHEN 'C' THEN 'Produto da China'
ELSE 'Produto de outros pases'
END AS [Tipo do Produto]
FROM Produtos

WHILE Assim como o IF/ELSE, o comando WHILE funciona da mesma forma


que nas linguagens de programao: ele faz com que um comando ou bloco de
comandos SQL seja executado repetidamente, ou seja, criado um loop o comando ou
bloco de comandos, que ser executado enquanto a condio especificada for
verdadeira.
A Listagem 05 nos d um exemplo prtico do uso do WHILE.
Listagem 05 Exemplo de uso do comando WHILE

DECLARE @Contador AS SMALLINT


SET @Contador = 1
WHILE @Contador <= 10
BEGIN
SELECT @Contador
SET @Contador = @Contador + 1
END

No exemplo acima inicializamos a varivel @Contador e atribumos a ela o valor 1.


Logo aps especificado um loop onde dentro dele a varivel ser incrementada em 1 a
cada passada do lao. Esse incremento ser feito at que o valor da varivel chegue a
10.
Utilizando os comandos BREAK e CONTINUE, que sero apresentados a seguir,
possvel controlar de dentro do loop a execuo dos comandos do WHILE.
WHILE com BREAK Podemos usar o WHILE com BREAK quando desejamos
interromper o loop em um determinado ponto. O BREAK tambm pode ser usado para
finalizar a execuo de um loop dentro de um comando IF/ELSE.
Vemos na Listagem 06 um exemplo com o uso do BREAK.
Listagem 06 Exemplo do comando BREAK em conjunto com o WHILE
DECLARE @Contador AS SMALLINT
SET @Contador = 1
WHILE @Contador <= 10
BEGIN
SELECT @Contador
IF @Contador = 5
BREAK
SET @Contador = @Contador + 1
END

Com a execuo do cdigo acima ser exibido em tela os nmeros de 1 a 5. Ao chegar


ao nmero 5, o loop ser interrompido pelo BREAK.
WHILE com CONTINUE Com o CONTINUE possvel reiniciar a execuo de
um loop executado pelo WHILE e interrompido pelo BREAK. Da mesma forma que o

BREAK, o CONTINUE geralmente iniciado por uma condio explicitada pelo IF.
Havendo comandos aps o CONTINUE, eles sero ignorados.
Podemos ver um exemplo com o CONTINUE na Listagem 07.
Listagem 07 Exemplo do comando CONTINUE em conjunto com o WHILE
DECLARE @Contador AS SMALLINT
SET @Contador = 1
WHILE @Contador <= 10
BEGIN
SELECT @Contador
IF @Contador <= 5
BEGIN
SET @Contador = @Contador + 1
CONTINUE
END
BREAK
END

Fonte de Consulta: Apostila de SQL Server, da Impacta Tecnologia.

Leia mais em: Programando no SQL Server


http://www.devmedia.com.br/programando-no-sql-server/22770#ixzz3B3oVWBt8