SQL Server - T-SQL Para Iniciantes
Transact-SQL ou T-SQL é uma extensão da linguagem SQL implementada pela Microsoft para o SQL Server. Ela acrescenta recursos evoluindo as seguintes características do SQL:
O T-SQL é o cerne do SQL Server. Todos os aplicativos que se comunicam com uma instância do SQL Server o fazem enviando instruções Transact-SQL ao servidor, independentemente da interface do usuário.
O Microsoft SQL Server usa palavras-chave reservadas para definir, manipular e acessar bancos de dados. As palavras-chave reservadas fazem parte da gramática da linguagem Transact-SQL usada pelo SQL Server para analisar e compreender as instruções e os lotes Transact-SQL. Embora seja sintaticamente possível 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 Variáveis |
A T-SQL suporta variáveis e você pode usá-las para armazenar valores.
|
Uma variável local Transact-SQL é um objeto que pode conter um valor de dados de um tipo específico. As variáveis em lotes e scripts são normalmente usadas:
Uma instrução DECLARE inicializa uma variável Transact-SQL por:
Exemplo: DECLARE @Contador int;
Quando uma variável é primeiramente declarada, seu valor é definido como NULL.
Para atribuir um valor à uma variável, use a instrução SET.
Este é o método preferido de atribuir um valor a uma variável. Uma variável também pode ter um valor atribuído sendo referenciado na lista selecionada de uma instrução SELECT.
GO |
O comando GO sinaliza o final de um lote de instruções Transact-SQL para os utilitários do SQL Server.
Sintaxe: GO [contador]
Onde:
GO não é uma instrução Transact-SQL; é um comando reconhecido pelos utilitários sqlcmd e osql e pelo Editor de códigos SQL Server Management Studio.
GO é um comando de utilitário que não exige nenhuma permissão. Pode ser executado por qualquer usuário.
Uma instrução Transact-SQL não pode ocupar a mesma linha que um comando GO.
IF...ELSE |
IF...ELSE é um controle condicional de fluxo básico usado na T-SQL.
Impõe condições na execução de uma instrução Transact-SQL. A instrução que segue uma palavra-chave IF e sua condição será executada se a condição for satisfeita: a expressão Booleana retorna TRUE.
A palavra-chave opcional ELSE introduz outra instrução que será executada quando a condição IF não for satisfeita: a expressão Booleana retorna FALSE.
Sintaxe:
IF Boolean_expression { sql_statement | statement_block } [ ELSE { sql_statement | statement_block } ] |
Uma construção IF...ELSE pode ser usada em lotes, em procedimentos armazenados e em consultas ad hoc. Quando essa construção é usada em um procedimento armazenado, ela normalmente é usada para testar a existência de algum parâmetro.
BEGIN...END |
Engloba uma série de instruções Transact-SQL de modo que um grupo de instruções possa ser executado.
BEGIN e END são 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 instruções Transact-SQL sejam válidas em um bloco BEGIN...END, certas instruções não devem ser agrupadas no mesmo lote ou bloco de instrução.
WHILE |
A instrução WHILE repete uma instrução ou bloco de instruções desde que a condição especificada permaneça verdadeira.
Ela define uma condição para a execução repetida de uma instrução ou um bloco de instruções SQL. As instruções serão executadas repetidamente desde que a condição especificada seja verdadeira.
A execução de instruções no loop WHILE pode ser controlada internamente ao loop com as palavras-chave BREAK e CONTINUE.
WHILE Boolean_expression { sql_statement | statement_block | BREAK | CONTINUE }
|
|
Se dois ou mais loops WHILE estiverem aninhados, o BREAK interno será encerrado para o próximo loop mais externo. Todas as instruções após o fim da primeira execução do loop interno e o loop mais externo seguinte serão reiniciadas.
Exemplos:
1- Loop WHILE | 2- Loop WHILE usando BREAK | 2- Loop WHILE usando BREAK e CONTINUE |
Dessa forma um programa poderá executar uma instrução BREAK se, por exemplo, não houver outras linhas a serem processadas. Uma restrição CONTINUE pode ser executada se, por exemplo, for necessário prosseguir com a execução do código.
CASE |
A expressão CASE é usada para avaliar várias condições e retornar um valor único para cada condição. Por exemplo, ela permite mostrar um valor alternativo a ser exibido dependendo do valor de uma coluna. Essa alteração nos dados é temporária. Portanto, não há nenhuma alteração permanente nos dados.
A expressão CASE consiste em:
Um uso comum da expressão CASE é substituir códigos ou abreviações por valores mais legíveis
Exemplo:
O exemplo seguinte usa a função CASE para alterar a exibição de categorias dos produtos para torná-las mais compreensíveis.
A expressão CASE tem dois formatos:
Os dois formatos dão suporte a um argumento ELSE opcional.
CASE pode ser usada em qualquer instrução ou cláusula que permita uma expressão válida.(Select,Update,Delete,etc.)
TRANSACTION |
SQL Server opera nos modos de transação a seguir.
A característica de uma transação e sua diferença para uma execução em lote é que ela pode desfazer todas as operações realizada desde o início da transação usando a instrução ROLLBACK TRANSACTION.
Para indicar o início de uma transação usamos a instrução BEGIN TRANSACTION OU BEGIN TRAN
Esta instrução marca o ponto inicial de uma transação local explícita. BEGIN TRANSACTION incrementa @@TRANCOUNT em 1.
Para confirmar a execução das operações realizadas na transação usamos a instrução COMMIT TRANSACTION OU COMMIT TRAN
Esta instrução marca o término de uma transação implícita ou explícita que teve êxito. Se @@TRANCOUNT for igual a 1, COMMIT TRANSACTION transformará todas as modificações de dados executadas desde o início da transação em parte permanente do banco de dados, liberará os recursos ocupados pela transação e decrementará @@TRANCOUNT para 0. Se @@TRANCOUNT for maior que 1, COMMIT TRANSACTION decrementará @@TRANCOUNT apenas de 1 e a transação continuará ativa.
Exemplo:
O exemplo ao lado
abre o banco de dados Agenda e inicia uma transação - BEGIN TRAN A seguir atualiza a coluna nome para 'Macorati' quando o Id for igual a 1 Depois atualiza a coluna para 'Jose Carlos Macoratti' quando o Id for igual a 1 Ao final confirmamos as operações e encerramos a transação atualizando o banco de dados com COMMIT TRAN
|
Para desfazer as operações realizadas desde o início da transação usamos a instrução ROLLBACK TRANSACTION OU ROLLBACK TRAN.
Esta instrução reverte uma transação explícita ou implícita ao começo da transação ou a um ponto de salvamento dentro da transação. Você pode usar ROLLBACK TRANSACTION para apagar todas as modificações de dados feitas desde o começo da transação ou até um ponto de salvamento. Ela também libera recursos mantidos pela transação.
Exemplo:
Suponha que, por qualquer motivo, a segunda instrução de atualização deve atualizar exatamente cinco linhas.
Se @@ROWCOUNT, que controla o número de linhas afetadas por cada instrução, for igual a cinco, a transação será confirmada caso contrário ele será cancelada.
A declaração ROLLBACK TRAN "desfaz" todo o trabalho desde a correspondente instrução BEGIN TRAN. Ela não vai executar qualquer instrução de atualização.
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 modificações realmente ocorreram.
Uma instrução ROLLBACK TRANSACTION não produz nenhuma mensagem para o usuário. Se forem necessários avisos em procedimentos armazenados ou Triggers, use as instruções RAISERROR ou PRINT. RAISERROR é a instrução preferida para indicar erros.
Instruções ROLLBACK TRANSACTION em procedimentos armazenados não afetam instruções subsequentes no lote que chamou o procedimento; instruções subsequentes no lote são executadas.
Instruções ROLLBACK TRANSACTION em Triggers finalizam o lote contendo a instrução que ativou o trigger; instruções subsequentes no lote são executadas.
Stored Procedures |
Procedimento armazenado ou Stored Procedure é uma coleção de comandos SQL executados contra um banco de dados que encapsula tarefas repetitivas, aceita parâmetros de entrada e retorna um valor de status (para indicar aceitação ou falha na execução).
O procedimento armazenado pode reduzir o tráfego na rede, visto que os comandos são executados diretamente no servidor. Além de melhorar a performance, criar mecanismos de segurança entre a manipulação dos dados do Banco de Dados.
Para criar uma Stored Procedure usamos a instrução : CREATE PROCEDURE que cria um procedimento armazenado Transact-SQL ou CLR (Common Language Runtime) no SQL Server.
Assim Procedimentos armazenados são semelhantes a procedimentos em outras linguagens de programação no sentido de que podem:
Quando um procedimento é executado pela primeira vez, ele é compilado para determinar um plano de acesso ideal para recuperar os dados. As execuções subsequentes do procedimento poderão 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 função de servidor sysadmin como um processo de segundo plano.
A instrução CREATE PROCEDURE não pode ser combinada com outras instruções 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 após expandir os objetos do banco de dados Clientes.mdf clique com o botão direito do mouse sobre o objeto Stored Procedures e selecione a opção 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 botão Save para salvar a stored procedure no banco de dados; A instrução 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
parâmetro idade do tipo int para ser usado na cláusula WHERE.
O
comando SQL usado é : |
Novamente repita o processo para criar a stored procedure selecionaContatosPorCidade que irá retornar os contados para uma determinada cidade;
Observe que criarmos o
parâmetro cidade do tipo varchar para ser usado na
cláusula WHERE.
O
comando SQL usado é : |
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.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
João 6:43 Respondeu-lhes Jesus: Não murmureis entre vós.
João 6:44 Ninguém pode vir a mim, se o Pai que me enviou não o trouxer; e eu o ressuscitarei no último dia.
João 6:45 Está escrito nos profetas: E serão todos ensinados por Deus. Portanto todo aquele que do Pai ouviu e aprendeu vem a mim.
João 6:46 Não que alguém tenha visto o Pai, senão aquele que é vindo de Deus; só ele tem visto o Pai.
João 6:47 Em verdade, em verdade vos digo: Aquele que crê tem a vida eterna.
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
http://technet.microsoft.com/pt-br/library/ms187953%28v=sql.105%29.aspx
http://technet.microsoft.com/pt-br/library/ms188037.aspx(IF/ELSE)
http://technet.microsoft.com/pt-br/library/ms178642.aspx(WHILE)
http://technet.microsoft.com/pt-br/library/ms189074%28v=sql.105%29.aspx(CASE)
http://msdn.microsoft.com/pt-br/library/ms174377.aspx(TRANSACTION)
http://msdn.microsoft.com/pt-br/library/ms181299.aspx (ROLLBACK)
http://msdn.microsoft.com/pt-br/library/ms187926.aspx(STORED PROCEDURE)