Você está na página 1de 18

SQL Server - T-SQL Para Iniciantes

Transact-SQL ou T-SQL uma extenso da linguagem SQL implementada pela Microsoft para o SQL Server. Ela acrescenta
recursos evoluindo as seguintes caractersticas do SQL:

Controle do fluxo

Variveis Locais

Vrias funes de suporte ao processamento de strings, datas, matemticas, etc.

Condicionais

O T-SQL o cerne do SQL Server. Todos os aplicativos que se comunicam com uma instncia do SQL Server o fazem
enviando instrues Transact-SQL ao servidor, independentemente da interface do usurio.
O Microsoft SQL Server usa palavras-chave reservadas para definir, manipular e acessar bancos de dados. As palavraschave reservadas fazem parte da gramtica da linguagem Transact-SQL usada pelo SQL Server para analisar e
compreender as instrues e os lotes Transact-SQL. Embora seja sintaticamente possvel usar as palavras-chave
reservadas do SQL Server como identificadores e nomes de objeto em scripts Transact-SQL, voc s pode fazer isso
usando identificadores delimitados.
A tabela a seguir lista as palavras-chave reservadas do SQL Server: T-SQL Palavras-Chave
A seguir um resumo dos principais comandos e recursos da linguagem T-SQL.

Usando Variveis
A T-SQL suporta variveis e voc pode us-las para armazenar valores.
--Sintaxe:
---declarao
DECLARE
@variable
data-type
4. ---Atribuio
5. SET
@variavel='va
lor'
6. ---Retornar
valor
7. SELECT
@variavel
8. ---Exemplo
9. DECLARE
@MeuNome
varchar(20)
10. SET
@MeuNome='M
acoratti'
11. SELECT
@MeuNome
1.
2.
3.

Uma varivel local Transact-SQL um objeto que pode conter um valor de dados de um tipo especfico. As variveis em
lotes e scripts so normalmente usadas:

Como um contador, para contar o nmero de vezes que um loop executado ou controlar quantas vezes o loop
executado;

Para reter um valor de dados a ser testado por uma instruo de controle de fluxo;

Para salvar um valor de dados a ser retornado por um cdigo de retorno de procedimento armazenado ou valor de
retorno de funo;

Uma instruo DECLARE inicializa uma varivel Transact-SQL por:

Atribuio de um nome. (O nome deve ter uma nica @ como o primeiro caractere.)

Atribuio de um tipo de dados fornecido por sistema ou definido pelo usurio e um tamanho. Para variveis
numricas, preciso e escala tambm so atribudas. Para variveis do tipo XML, uma coleo de esquema opcional
pode ser atribuda.

Definio do valor como NULL;

Exemplo: DECLARE @Contador int;


Quando uma varivel primeiramente declarada, seu valor definido como NULL.
Para atribuir um valor uma varivel, use a instruo SET.
Este o mtodo preferido de atribuir um valor a uma varivel. Uma varivel tambm pode ter um valor atribudo sendo
referenciado na lista selecionada de uma instruo SELECT.

GO
O comando GO sinaliza o final de um lote de instrues Transact-SQL para os utilitrios do SQL Server.

Sintaxe: GO [contador]
Onde:
Contador - um nmero inteiro positivo. O lote que precede GO ser executado pelo nmero de vezes
especificado.
GO no uma instruo Transact-SQL; um comando reconhecido pelos utilitrios sqlcmd e osql e pelo Editor de cdigos
SQL Server Management Studio.
GO um comando de utilitrio que no exige nenhuma permisso. Pode ser executado por qualquer usurio.
Uma instruo Transact-SQL no pode ocupar a mesma linha que um comando GO.

IF...ELSE
IF...ELSE um controle condicional de fluxo bsico usado na T-SQL.
Impe condies na execuo de uma instruo Transact-SQL. A instruo que segue uma palavra-chave IF e sua condio
ser executada se a condio for satisfeita: a expresso Booleana retorna TRUE.
A palavra-chave opcional ELSE introduz outra instruo que ser executada quando a condio IF no for satisfeita: a
expresso Booleana retorna FALSE.
Sintaxe:

IF Boolean_expression
{ sql_statement |
statement_block }
[ ELSE
{ sql_statement |
statement_block } ]

Uma construo IF...ELSE pode ser usada em lotes, em procedimentos armazenados e em consultas ad hoc. Quando essa
construo usada em um procedimento armazenado, ela normalmente usada para testar a existncia de algum
parmetro.

BEGIN...END
Engloba uma srie de instrues Transact-SQL de modo que um grupo de instrues possa ser executado.
BEGIN e END so palavras-chave da linguagem de controle de fluxo.
Sintaxe:

BEGIN
{
sql_statement |
statement_block
}
END

Os blocos BEGIN...END podem ser aninhados.


Embora todas as instrues Transact-SQL sejam vlidas em um bloco BEGIN...END, certas instrues no devem ser
agrupadas no mesmo lote ou bloco de instruo.

WHILE
A instruo WHILE repete uma instruo ou bloco de instrues desde que a condio especificada permanea
verdadeira.

Ela define uma condio para a execuo repetida de uma instruo ou um bloco de instrues SQL. As instrues sero
executadas repetidamente desde que a condio especificada seja verdadeira.
A execuo de instrues no loop WHILE pode ser controlada internamente ao loop com as palavras-chave BREAK e
CONTINUE.
Argumentos

WHILE Boolean_expression
{ sql_statement | statement_block | BREAK |
CONTINUE }

Boolean_expression
uma expresso que retorna TRUE ou FALSE. Se a expresso booleana
contiver uma instruo SELECT, a instruo SELECT dever ser includa
entre parnteses.
{sql_statement | statement_block}
qualquer instruo Transact-SQL ou agrupamento de instrues,
conforme definido com um bloco de instrues. Para definir um bloco de
instrues, use as palavras-chave BEGIN e END de controle de fluxo.
BREAK
Provoca uma sada do loop WHILE mais interno. Todas as instrues que
apaream depois da palavra-chave END, que marca o final do loop, sero
executadas.
CONTINUE
Faz com que o loop WHILE seja reiniciado, ignorando todas as instrues
depois da palavra-chave CONTINUE

Se dois ou mais loops WHILE estiverem aninhados, o BREAK interno ser encerrado para o prximo loop mais externo.
Todas as instrues aps o fim da primeira execuo do loop interno e o loop mais externo seguinte sero reiniciadas.
Exemplos:
1- Loop WHILE

2- Loop WHILE usando BREAK

2- Loop WHILE usando BREAK e


CONTINUE

Dessa forma um programa poder executar uma instruo BREAK se, por exemplo, no houver outras linhas a serem
processadas. Uma restrio CONTINUE pode ser executada se, por exemplo, for necessrio prosseguir com a execuo do
cdigo.

CASE
A expresso CASE usada para avaliar vrias condies e retornar um valor nico para cada condio. Por exemplo, ela
permite mostrar um valor alternativo a ser exibido dependendo do valor de uma coluna. Essa alterao nos dados
temporria. Portanto, no h nenhuma alterao permanente nos dados.
A expresso CASE consiste em:

A palavra-chave CASE.

O nome da coluna a ser transformada.

As clusulas WHEN que especificam as expresses a serem pesquisadas e as clusulas THEN que especificam as
expresses pelas quais substitu-las.

Uma clusula ELSE opcional que define a expresso retornada, se nenhuma operao de comparao for avaliada
como TRUE.

A palavra-chave END.

Uma clusula AS opcional que define um alias para a expresso CASE.

Um uso comum da expresso CASE substituir cdigos ou abreviaes por valores mais legveis
Exemplo:
O exemplo seguinte usa a funo CASE para alterar a exibio de categorias dos produtos para torn-las mais
compreensveis.

A expresso CASE tem dois formatos:

A expresso CASE simples compara uma expresso com um conjunto de expresses simples para determinar o
resultado.

A expresso CASE pesquisada avalia um conjunto de expresses booleanas para determinar o resultado.

Os dois formatos do suporte a um argumento ELSE opcional.

CASE pode ser usada em qualquer instruo ou clusula que permita uma expresso vlida. (Select,Update,Delete,etc.)

TRANSACTION
Uma transao uma nica unidade de trabalho. Se uma transao tiver xito, todas as modificaes de dados feitas
durante a transao estaro confirmadas e se tornaro parte permanente do banco de dados. Se uma transao encontrar
erros e precisar ser cancelada ou revertida, todas as modificaes de dados sero apagadas.
SQL Server opera nos modos de transao a seguir.
1. Transaes de confirmao automtica : Cada instruo individual uma transao.
2. Transaes explcitas : Cada transao iniciada explicitamente com a instruo BEGIN TRANSACTION e
finalizada explicitamente com uma instruo COMMIT ou ROLLBACK.
3. Transaes implcitas : Uma transao nova iniciada implicitamente quando a transao anterior concluda,
mas cada transao explicitamente concluda com uma instruo COMMIT ou ROLLBACK.
4. Transaes de escopo de lote : Aplicvel apenas a MARS (Conjuntos de Resultados Ativos Mltiplos), uma
transao Transact-SQL explcita ou implcita iniciada em uma sesso MARS se torna uma transao de escopo de
lote. Uma transao de escopo de lote no confirmada ou revertida, quando um lote concludo, revertida
automaticamente pelo SQL Server
A caracterstica de uma transao e sua diferena para uma execuo em lote que ela pode desfazer todas as
operaes realizada desde o incio da transao usando a instruo ROLLBACK TRANSACTION.
Para indicar o incio de uma transao usamos a instruo BEGIN TRANSACTION OU BEGIN TRAN
Esta instruo marca o ponto inicial de uma transao local explcita. BEGIN TRANSACTION incrementa @@TRANCOUNT
em 1.

Para confirmar a execuo das operaes realizadas na transao usamos a instruo COMMIT TRANSACTION OU COMMIT
TRAN
Esta instruo marca o trmino de uma transao implcita ou explcita que teve xito. Se @@TRANCOUNT for igual a 1,
COMMIT TRANSACTION transformar todas as modificaes de dados executadas desde o incio da transao em parte
permanente do banco de dados, liberar os recursos ocupados pela transao e decrementar @@TRANCOUNT para 0. Se
@@TRANCOUNT for maior que 1, COMMIT TRANSACTION decrementar @@TRANCOUNT apenas de 1 e a transao
continuar ativa.
Exemplo:
O exemplo ao lado abre o banco de
dados Agenda e
inicia uma transao - BEGIN TRAN
A seguir atualiza a coluna nome
para 'Macorati' quando o Id for igual
a1
Depois atualiza a coluna para 'Jose
Carlos Macoratti' quando o Id for
igual a 1
Ao final confirmamos as operaes
e encerramos a transao
atualizando o banco de dados com
COMMIT TRAN

Para desfazer as operaes realizadas desde o incio da transao usamos a instruo ROLLBACK TRANSACTION OU
ROLLBACK TRAN.

Esta instruo reverte uma transao explcita ou implcita ao comeo da transao ou a um ponto de salvamento dentro
da transao. Voc pode usar ROLLBACK TRANSACTION para apagar todas as modificaes de dados feitas desde o
comeo da transao ou at um ponto de salvamento. Ela tambm libera recursos mantidos pela transao.
Exemplo:

Suponha que, por qualquer motivo, a segunda instruo de atualizao deve atualizar exatamente cinco linhas.

Se @@ROWCOUNT, que controla o nmero de linhas afetadas por cada instruo, for igual a cinco, a transao ser
confirmada caso contrrio ele ser cancelada.
A declarao ROLLBACK TRAN "desfaz" todo o trabalho desde a correspondente instruo BEGIN TRAN. Ela no vai
executar qualquer instruo de atualizao.
Note que o Query Analyzer ir mostrar-lhe mensagens indicando que linhas foram atualizadas, mas voc pode consultar o
banco de dados para verificar se as modificaes realmente ocorreram.
Uma instruo ROLLBACK TRANSACTION no produz nenhuma mensagem para o usurio. Se forem necessrios avisos em
procedimentos armazenados ou Triggers, use as instrues RAISERROR ou PRINT. RAISERROR a instruo preferida para
indicar erros.
Instrues ROLLBACK TRANSACTION em procedimentos armazenados no afetam instrues subsequentes no lote que
chamou o procedimento; instrues subsequentes no lote so executadas.
Instrues ROLLBACK TRANSACTION em Triggers finalizam o lote contendo a instruo que ativou o trigger; instrues
subsequentes no lote so executadas.

Stored Procedures
Procedimento armazenado ou Stored Procedure uma coleo de comandos SQL executados contra um banco de dados
que encapsula tarefas repetitivas, aceita parmetros de entrada e retorna um valor de status (para indicar aceitao ou
falha na execuo).
O procedimento armazenado pode reduzir o trfego na rede, visto que os comandos so executados diretamente no
servidor. Alm de melhorar a performance, criar mecanismos de segurana entre a manipulao dos dados do Banco de
Dados.

Para criar uma Stored Procedure usamos a instruo : CREATE PROCEDURE que cria um procedimento armazenado
Transact-SQL ou CLR (Common Language Runtime) no SQL Server.
Assim Procedimentos armazenados so semelhantes a procedimentos em outras linguagens de programao no sentido de
que podem:

Aceitar parmetros de entrada e retornar vrios valores no formulrio de parmetros de sada para o procedimento
de chamada ou lote.

Conter instrues de programao que executam operaes no banco de dados, inclusive chamar outros
procedimentos.

Retornar um valor de status a um procedimento de chamada ou lote para indicar xito ou falha (e o motivo da
falha).

Quando um procedimento executado pela primeira vez, ele compilado para determinar um plano de acesso ideal para
recuperar os dados. As execues subsequentes do procedimento podero reutilizar o plano j gerado se ele ainda
estiver no cache de planos do Mecanismo de Banco de Dados.
Um ou mais procedimentos podem ser executados automaticamente quando o SQL Server iniciado. Os procedimentos
devem ser criados pelo administrador do sistema no banco de dados mestre e executados com funo de servidor
sysadmin como um processo de segundo plano.
A instruo CREATE PROCEDURE no pode ser combinada com outras instrues Transact-SQL em um nico lote.
Exemplo:
A seguir temos um exemplo de como criar stored procedures ou procedimentos armazenados no SQL Server usando o
banco de dados Clientes.mdf e a tabela Contatos.
Abra o DataBase Explorer e aps expandir os objetos do banco de dados Clientes.mdf clique com o boto direito do
mouse sobre o objeto Stored Procedures e selecione a opo Add New Stored Procedure;

No editor do SQL Server vamos criar a stored procedure exibeContatos que ir retornar todos os contatos cadastrados na
tabela Contatos.
Digite o comando conforme ao lado e clique no boto Save
para salvar
a stored procedure no banco de dados;
A instruo SQL usada : SELECT * from Contatos
Repita o procedimento agora para criar a stored procedure SelecionaContatosPorIdade onde iremos retornar todos os
contatos com idade superior a uma idade definida.

Observe que criarmos o parmetro idade do tipo int para ser


usado
na clusula WHERE.
O comando SQL usado :
SELECT * from Contatos WHERE idade > @ idade
Novamente repita o processo para criar a stored procedure selecionaContatosPorCidade que ir retornar os contados
para uma determinada cidade;
Observe que criarmos o parmetro cidade do tipo varchar para ser
usado na clusula WHERE.
O comando SQL usado :
SELECT * from Contatos WHERE cidade = @ cidade
Ao final teremos as stored procedures criadas no banco de dados e prontas para uso conforme a figura abaixo:

Vimos assim um pequeno resumo dos principais conceitos da linguagem T-SQL. Em outro artigo irei abordar outros
conceitos como Views, Triggers, etc.

Você também pode gostar