Você está na página 1de 8

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

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 Vari veis Locais V rias fun!"es de suporte ao processamento de strings# datas# matem ticas# etc. Condicionais $ %&SQL o cerne do SQL Server. %odos os aplicativos 'ue se comunicam com uma inst(ncia do SQL Server o fa)em enviando instru!"es Transact-SQL ao servidor# independentemente da interface do usu rio. $ Microsoft SQL Server usa palavras&c*ave reservadas para definir# manipular e acessar +ancos de dados. ,s palavras&c*ave reservadas fa)em parte da gram tica da linguagem Transact-SQL usada pelo SQL Server para analisar e compreender as instru!"es e os lotes %ransact&SQL. Em+ora se-a sintaticamente possvel usar as palavras&c*ave reservadas do SQL Server como identificadores e nomes de o+-eto em scripts %ransact&SQL# voc. s/ pode fa)er isso usando identificadores delimitados. , ta+ela a seguir lista as palavras&c*ave reservadas do SQL Server: %&SQL 0alavras&C*ave , seguir um resumo dos principais comandos e recursos da linguagem %&SQL.

Usando Variveis
, %&SQL suporta vari veis e voc. pode us &las para arma)enar valores. 1. &&Sintaxe: 2. &&&declara!o 3. DECLARE @variable data-ty e 4. &&&,tri+ui!o 5. SET @variavel!"valor" 6. &&&1etornar valor 7. SELECT @variavel 8. &&&Exemplo 9. 2ECL,1E 3Meu4ome varc*ar5678 10. SE% 3Meu4ome9:Macoratti: 11. SELEC% 3Meu4ome

;ma vari vel local %ransact&SQL um o+-eto 'ue pode conter um valor de dados de um tipo especfico. ,s vari veis em lotes e scripts so normalmente usadas: Como um contador# para contar o n<mero de ve)es 'ue um loop executado ou controlar 'uantas ve)es o loop executado= 0ara reter um valor de dados a ser testado por uma instru!o de controle de fluxo= 0ara salvar um valor de dados a ser retornado por um c/digo de retorno de procedimento arma)enado ou valor de retorno de fun!o= ;ma instru!o DECLARE iniciali)a uma vari vel %ransact&SQL por: ,tri+ui!o de um nome. (O nome deve ter uma nica @ como o primeiro caractere.) ,tri+ui!o de um tipo de dados fornecido por sistema ou definido pelo usu rio e um taman*o. 0ara vari veis numricas# preciso e escala tam+m so atri+udas. 0ara vari veis do tipo >ML# uma cole!o de es'uema opcional pode ser atri+uda. 2efini!o do valor como #ULL = E$e% lo& 2ECL,1E 3Contador int= Quando uma vari vel primeiramente declarada# seu valor definido como #ULL . 0ara atri+uir um valor ? uma vari vel# use a instru!o SET . Este o mtodo preferido de atri+uir um valor a uma vari vel. ;ma vari vel tam+m pode ter um valor atri+udo sendo

1 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

referenciado na lista selecionada de uma instru!o SELECT .

'(
$ comando '( sinali)a o final de um lote de instru!"es %ransact&SQL para os utilit rios do SQL Server. Sintaxe: '( )contador* $nde: Contador & @ um n<mero inteiro positivo. $ lote 'ue precede A$ ser executado pelo n<mero de ve)es especificado. A$ no uma instru!o %ransact&SQL= um comando recon*ecido pelos utilit rios s+lc%d e os+l e pelo Editor de c/digos SQL Server Management Studio. A$ um comando de utilit rio 'ue no exige nen*uma permisso. 0ode ser executado por 'ual'uer usu rio. ;ma instru!o %ransact&SQL no pode ocupar a mesma lin*a 'ue um comando A$.

I,---ELSE
I,---ELSE um controle condicional de fluxo + sico usado na %&SQL. Bmp"e condi!"es na execu!o de uma instru!o %ransact&SQL. , instru!o 'ue segue uma palavra&c*ave BC e sua condi!o ser executada se a condi!o for satisfeita: a expresso Dooleana retorna TRUE . , palavra&c*ave opcional ELSE introdu) outra instru!o 'ue ser executada 'uando a condi!o BC no for satisfeita: a expresso Dooleana retorna ,ALSE . Sintaxe:

I, .oolean/e$ ression 0 s+l/state%ent 1 state%ent/bloc2 3 ) ELSE 0 s+l/state%ent 1 state%ent/bloc2 3 *

;ma constru!o I,---ELSE pode ser usada em lotes# em procedimentos arma)enados e em consultas ad *oc. Quando essa constru!o usada em um procedimento arma)enado# ela normalmente usada para testar a exist.ncia de algum par(metro.

.E'I#---E#D
Englo+a uma srie de instru!"es %ransact&SQL de modo 'ue um grupo de instru!"es possa ser executado. .E'I# e E#D so palavras&c*ave da linguagem de controle de fluxo. Sintaxe:

2 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

.E'I# 0 s+l/state%ent 1 state%ent/bloc2 3 E#D

$s +locos .E'I#---E#D podem ser anin*ados. Em+ora todas as instru!"es %ransact&SQL se-am v lidas em um +loco .E'I#---E#D # certas instru!"es no devem ser agrupadas no mesmo lote ou +loco de instru!o.

45ILE
, instru!o 45ILE repete uma instru!o ou +loco de instru!"es desde 'ue a condi!o especificada permane!a verdadeira. Ela define uma condi!o para a execu!o repetida de uma instru!o ou um +loco de instru!"es SQL. ,s instru!"es sero executadas repetidamente desde 'ue a condi!o especificada se-a verdadeira. , execu!o de instru!"es no loop 45ILE pode ser controlada internamente ao loop com as palavras&c*ave .REA6 e C(#TI#UE . (r)*"ent#s
.oolean/e$ ression @ uma expresso 'ue retorna %1;E ou C,LSE. Se a expresso +ooleana contiver uma instru!o SELEC%# a instru!o SELEC% dever ser includa entre par.nteses. 0s+l/state%ent 1 state%ent/bloc23 @ 'ual'uer instru!o %ransact&SQL ou agrupamento de instru!"es# conforme definido com um +loco de instru!"es. 0ara definir um +loco de instru!"es# use as palavras&c*ave .E'I# e E#D de controle de fluxo. .REA6 0rovoca uma sada do loop EFBLE mais interno. %odas as instru!"es 'ue apare!am depois da palavra&c*ave E42# 'ue marca o final do loop# sero executadas. C(#TI#UE Ca) com 'ue o loop EFBLE se-a reiniciado# ignorando todas as instru!"es depois da palavra&c*ave C$4%B4;E

45ILE .oolean/e$ ression 0 s+l/state%ent 1 state%ent/bloc2 1 .REA6 1 C(#TI#UE 3

Se dois ou mais loops 45ILE estiverem anin*ados# o .REA6 interno ser encerrado para o pr/ximo loop mais externo. %odas as instru!"es ap/s o fim da primeira execu!o do loop interno e o loop mais externo seguinte sero reiniciadas. Exemplos: G& Loop EFBLE 6& Loop EFBLE usando D1E,H 6& Loop EFBLE usando D1E,H e C$4%B4;E

3 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

2essa forma um programa poder executar uma instru!o .REA6 se# por exemplo# no *ouver outras lin*as a serem processadas. ;ma restri!o C(#TI#UE pode ser executada se# por exemplo# for necess rio prosseguir com a execu!o do c/digo.

CASE
, expresso C,SE usada para avaliar v rias condi!"es e retornar um valor <nico para cada condi!o. 0or exemplo# ela permite mostrar um valor alternativo a ser exi+ido dependendo do valor de uma coluna. Essa altera!o nos dados tempor ria. 0ortanto# no * nen*uma altera!o permanente nos dados. , expresso C,SE consiste em: , palavra&c*ave C,SE. $ nome da coluna a ser transformada. ,s cl usulas 45E# 'ue especificam as express"es a serem pes'uisadas e as cl usulas T5E# 'ue especificam as express"es pelas 'uais su+stitu&las. ;ma cl usula ELSE opcional 'ue define a expresso retornada# se nen*uma opera!o de compara!o for avaliada como TRUE . , palavra&c*ave E42. ;ma cl usula ,S opcional 'ue define um alias para a expresso C,SE. ;m uso comum da expresso C,SE su+stituir c/digos ou a+revia!"es por valores mais legveis Exemplo: $ exemplo seguinte usa a fun!o C,SE para alterar a exi+i!o de categorias dos produtos para torn &las mais compreensveis.

4 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

, expresso C,SE tem dois formatos: , expresso C,SE simples compara uma expresso com um con-unto de express"es simples para determinar o resultado. , expresso C,SE pes'uisada avalia um con-unto de express"es +ooleanas para determinar o resultado. $s dois formatos do suporte a um argumento ELSE opcional. C,SE pode ser usada em 'ual'uer instru!o ou cl usula 'ue permita uma expresso v lida. (Select,Update,Delete,etc.)

TRA#SACTI(#
;ma transa!o uma <nica unidade de tra+al*o. Se uma transa!o tiver .xito# todas as modifica!"es de dados feitas durante a transa!o estaro confirmadas e se tornaro parte permanente do +anco de dados. Se uma transa!o encontrar erros e precisar ser cancelada ou revertida# todas as modifica!"es de dados sero apagadas. SQL Server opera nos modos de transa!o a seguir. 1. Transa78es de con9ir%a7:o a;to%tica : Cada instru!o individual uma transa!o. 2. Transa78es e$ l<citas : Cada transa!o iniciada explicitamente com a instru!o .E'I# TRA#SACTI(# e finali)ada explicitamente com uma instru!o C(==IT o; R(LL.AC63. Transa78es i% l<citas & ;ma transa!o nova iniciada implicitamente 'uando a transa!o anterior concluda# mas cada transa!o explicitamente concluda com uma instru!o C(==IT o; R(LL.AC64. Transa78es de esco o de lote : ,plic vel apenas a =ARS >Con?;ntos de Res;ltados Ativos =@lti losA # uma transa!o %ransact&SQL explcita ou implcita iniciada em uma sesso =ARS se torna uma transa!o de escopo de lote. ;ma transa!o de escopo de lote no confirmada ou revertida# 'uando um lote concludo# revertida automaticamente pelo SQL Server , caracterstica de uma transa!o e sua diferen!a para uma execu!o em lote 'ue ela pode desfa)er todas as opera!"es reali)ada desde o incio da transa!o usando a instru!o R(LL.AC6 TRA#SACTI(# . 0ara indicar o incio de uma transa!o usamos a instru!o .E'I# TRA#SACTI(# (U .E'I# TRA# Esta instru!o marca o ponto inicial de uma transa!o local explcita. DEAB4 %1,4S,C%B$4 incrementa 33%1,4C$;4% em G. 0ara confirmar a execu!o das opera!"es reali)adas na transa!o usamos a instru!o C(==IT TRA#SACTI(# (U C(==IT TRA# Esta instru!o marca o trmino de uma transa!o implcita ou explcita 'ue teve .xito. Se 33%1,4C$;4% for igual a G# C$MMB% %1,4S,C%B$4 transformar todas as modifica!"es de dados executadas desde o incio da transa!o em parte permanente do +anco de dados# li+erar os recursos ocupados pela transa!o e decrementar 33%1,4C$;4% para 7. Se 33%1,4C$;4% for maior 'ue G# C$MMB% %1,4S,C%B$4 decrementar 33%1,4C$;4% apenas de G e a transa!o continuar ativa. Exemplo: $ exemplo ao lado a+re o +anco de dados ,genda e inicia uma transa!o & .E'I# TRA# , seguir atuali)a a coluna nome para :Macorati: 'uando o Bd for igual a G 2epois atuali)a a coluna para

5 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

:Iose Carlos Macoratti: 'uando o Bd for igual a G ,o final confirmamos as opera!"es e encerramos a transa!o atuali)ando o +anco de dados com C(==IT TRA#

0ara desfa)er as opera!"es reali)adas desde o incio da transa!o usamos a instru!o R(LL.AC6 TRA#SACTI(# (U R(LL.AC6 TRA#Esta instru!o reverte uma transa!o explcita ou implcita ao come!o da transa!o ou a um ponto de salvamento dentro da transa!o. Voc. pode usar R(LL.AC6 TRA#SACTI(# para apagar todas as modifica!"es de dados feitas desde o come!o da transa!o ou at um ponto de salvamento. Ela tam+m li+era recursos mantidos pela transa!o. Exemplo:

Supon*a 'ue# por 'ual'uer motivo# a segunda instru!o de atuali)a!o deve atuali)ar exatamente cinco lin*as. Se @@R(4C(U#T # 'ue controla o n<mero de lin*as afetadas por cada instru!o# for igual a cinco# a transa!o ser confirmada caso contr rio ele ser cancelada. , declara!o R(LL.AC6 TRA# "desfaz" todo o tra+al*o desde a correspondente instru!o .E'I# TRA# . Ela no vai executar 'ual'uer instru!o de atuali)a!o. 4ote 'ue o QuerJ ,nalJ)er ir mostrar&l*e mensagens indicando 'ue lin*as foram atuali)adas# mas voc. pode consultar o +anco de dados para verificar se as modifica!"es realmente ocorreram. ;ma instru!o 1$LLD,CH %1,4S,C%B$4 no produ) nen*uma mensagem para o usu rio. Se forem necess rios avisos em procedimentos arma)enados ou %riggers# use as instru!"es RAISERR(R o; PRI#T- 1,BSE11$1 a instru!o preferida para indicar erros. Bnstru!"es R(LL.AC6 TRA#SACTI(# em procedimentos arma)enados no afetam instru!"es su+se'uentes no lote 'ue c*amou o procedimento= instru!"es su+se'uentes no lote so executadas.

6 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

Bnstru!"es 1$LLD,CH %1,4S,C%B$4 em %riggers finali)am o lote contendo a instru!o 'ue ativou o trigger = instru!"es su+se'uentes no lote so executadas.

Stored Proced;res
Procedi%ento ar%aBenado ou Stored Proced;re uma cole!o de comandos SQL executados contra um +anco de dados 'ue encapsula tarefas repetitivas# aceita par(metros de entrada e retorna um valor de status 5para indicar aceita!o ou fal*a na execu!o8. $ procedimento arma)enado pode redu)ir o tr fego na rede# visto 'ue os comandos so executados diretamente no servidor. ,lm de mel*orar a performance# criar mecanismos de seguran!a entre a manipula!o dos dados do Danco de 2ados. 0ara criar uma Stored 0rocedure usamos a instru!o : CREATE PR(CEDURE 'ue cria um procedimento arma)enado Transact-SQL ou CLR (Common anguage !untime) no SQL Server. ,ssim 0rocedimentos arma)enados so semel*antes a procedimentos em outras linguagens de programa!o no sentido de 'ue podem: ,ceitar par(metros de entrada e retornar v rios valores no formul rio de par(metros de sada para o procedimento de c*amada ou lote. Conter instru!"es de programa!o 'ue executam opera!"es no +anco de dados# inclusive c*amar outros procedimentos. 1etornar um valor de status a um procedimento de c*amada ou lote para indicar .xito ou fal*a 5e o motivo da fal*a8. Quando um procedimento executado pela primeira ve)# ele compilado para determinar um plano de acesso ideal para recuperar os dados. ,s execu!"es su+se'uentes do procedimento podero reutili)ar o plano - gerado se ele ainda estiver no cac*e de planos do Mecanismo de Danco de 2ados. ;m ou mais procedimentos podem ser executados automaticamente 'uando o SQL Server iniciado. $s procedimentos devem ser criados pelo administrador do sistema no +anco de dados mestre e executados com fun!o de servidor sysad%in como um processo de segundo plano. , instru!o CREATE PR(CEDURE no pode ser com+inada com outras instru!"es %ransact&SQL em um <nico lote. E$e% lo& , seguir temos um exemplo de como criar stored procedures ou procedimentos arma)enados no SQL Server usando o +anco de dados Clientes-%d9 e a ta+ela Contatos . ,+ra o Data.ase E$ lorer e ap/s expandir os o+-etos do +anco de dados Clientes-%d9 cli'ue com o +oto direito do mouse so+re o o+-eto Stored 0rocedures e selecione a op!o Add #eC Stored Proced;reD

4o editor do SQL Server vamos criar a stored procedure e$ibeContatos 'ue ir retornar todos os contatos cadastrados na ta+ela Contatos . 2igite o comando conforme ao lado e cli'ue no +oto Save para salvar a stored procedure no +anco de dados= , instru!o SQL usada : SELEC% K from Contatos 1epita o procedimento agora para criar a stored procedure SelecionaContatosPorIdade onde iremos retornar todos os contatos com idade superior a uma idade definida.

7 'e 8

28 02 2014 21:39

SQL Server - T-SQL Para Iniciantes

http: !!!."ac#ratti.net 14 02 s$%&ts$%1.ht"

$+serve 'ue criarmos o par(metro idade do tipo int para ser usado na cl usula EFE1E. $ comando SQL usado : SELEC% K from Contatos EFE1E idade L 3 idade 4ovamente repita o processo para criar a stored procedure selecionaContatosPorCidade 'ue ir retornar os contados para uma determinada cidade= $+serve 'ue criarmos o par(metro cidade do tipo varc*ar para ser usado na cl usula EFE1E. $ comando SQL usado : SELEC% K from Contatos EFE1E cidade 9 3 cidade ,o final teremos as stored procedures criadas no +anco de dados e prontas para uso conforme a figura a+aixo:

Vimos assim um pe'ueno resumo dos principais conceitos da linguagem %&SQL. Em outro artigo irei a+ordar outros conceitos como VieMs# %riggers# etc. Aostou N Compartil*e no Cace+ooO Compartil*e no %Mitter

+#,# 6:43 -esp#n'e*-%hes +es*s: .,# "*r"*reis entre v/s. +#,# 6:44 .in)*0" p#'e vir a "i"1 se # Pai $*e "e envi#* n,# # tr#*2er3 e e* # ress*scitarei n# 4%ti"# 'ia. +#,# 6:45 5st6 escrit# n#s pr#7etas: 5 ser,# t#'#s ensina'#s p#r 8e*s. P#rtant# t#'# a$*e%e $*e '# Pai #*vi* e apren'e* ve" a "i". +#,# 6:46 .,# $*e a%)*0" tenha vist# # Pai1 sen,# a$*e%e $*e 0 vin'# 'e 8e*s3 s/ e%e te" vist# # Pai. +#,# 6:47 5" ver'a'e1 e" ver'a'e v#s 'i)#: ($*e%e $*e cr9 te" a vi'a eterna.
1efer.ncias: Se!o VD .4E% do Site Macoratti.net Super 2V2 .4E% & , sua porta de entrada na plataforma .4E% Super 2V2 Vdeo ,ulas & Vdeo ,ula so+re VD .4E%# ,S0 .4E% e CP Se!o CP do site Macoratti.net *ttp:QQtec*net.microsoft.comQpt&+rQli+rarJQmsGRSTUVW6Rv9s'l.G7UW6T.aspx *ttp:QQtec*net.microsoft.comQpt&+rQli+rarJQmsGRR7VS.aspx5BCQELSE8 *ttp:QQtec*net.microsoft.comQpt&+rQli+rarJQmsGSRXY6.aspx5EFBLE8 *ttp:QQtec*net.microsoft.comQpt&+rQli+rarJQmsGRT7SYW6Rv9s'l.G7UW6T.aspx5C,SE8 *ttp:QQmsdn.microsoft.comQpt&+rQli+rarJQmsGSYVSS.aspx5%1,4S,C%B$48 *ttp:QQmsdn.microsoft.comQpt&+rQli+rarJQmsGRG6TT.aspx 51$LLD,CH8 *ttp:QQmsdn.microsoft.comQpt&+rQli+rarJQmsGRST6X.aspx5S%$1E2 01$CE2;1E8

Jos Carlos Macoratti

8 'e 8

28 02 2014 21:39