Transact-SQL - Transact-SQL

Transact-SQL ( T-SQL ) é a extensão proprietária da Microsoft e Sybase para o SQL (Structured Query Language) usado para interagir com bancos de dados relacionais . T-SQL expande o padrão SQL para incluir programação procedural , variáveis ​​locais , várias funções de suporte para processamento de string, processamento de data, matemática, etc. e alterações nas instruções DELETE e UPDATE .

O Transact-SQL é fundamental para o uso do Microsoft SQL Server . Todos os aplicativos que se comunicam com uma instância do SQL Server o fazem enviando instruções Transact-SQL para o servidor, independentemente da interface do usuário do aplicativo.

Os procedimentos armazenados no SQL Server são rotinas executáveis ​​do lado do servidor. A vantagem dos procedimentos armazenados é a capacidade de passar parâmetros.

Variáveis

Transact-SQL fornece as seguintes instruções para declarar e definir variáveis locais: DECLARE, SETe SELECT.

DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
  FROM Sales.Store
  WHERE CustomerID = 100;

Controle de fluxo

Palavras-chave para controle de fluxo em Transact-SQL incluem BEGINe END, BREAK, CONTINUE, GOTO, IFe ELSE, RETURN, WAITFOR, e WHILE.

IFe ELSEpermitir a execução condicional. Este extrato de lote imprimirá "É fim de semana" se a data atual for um dia de fim de semana ou "É um dia de semana" se a data atual for um dia de semana. (Observação: este código pressupõe que o domingo está configurado como o primeiro dia da semana na @@DATEFIRSTconfiguração.)

IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
   PRINT 'It is the weekend.';
ELSE
   PRINT 'It is a weekday.';

BEGINe ENDmarque um bloco de afirmações . Se mais de uma instrução deve ser controlada pela condicional no exemplo acima, podemos usar BEGINe ENDassim:

IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
   PRINT 'It is the weekend.';
   PRINT 'Get some rest on the weekend!';
END;
ELSE
BEGIN
   PRINT 'It is a weekday.';
   PRINT 'Get to work on a weekday!';
END;

WAITFORirá esperar por um determinado período de tempo ou até uma determinada hora do dia. A instrução pode ser usada para atrasos ou para bloquear a execução até a hora definida.

RETURNé usado para retornar imediatamente de um procedimento armazenado ou função.

BREAKtermina o WHILEloop envolvente , enquanto CONTINUEfaz com que a próxima iteração do loop seja executada. Um exemplo de WHILEloop é fornecido a seguir.

DECLARE @i INT;
SET @i = 0;

WHILE @i < 5
BEGIN
   PRINT 'Hello world.';
   SET @i = @i + 1;
END;

Alterações nas instruções DELETE e UPDATE

No Transact-SQL, as instruções DELETEe UPDATEsão aprimoradas para permitir que os dados de outra tabela sejam usados ​​na operação, sem a necessidade de uma subconsulta:

  • DELETEaceita tabelas unidas na FROMcláusula, de maneira semelhante a SELECT. Quando isso é feito, o nome ou alias de qual tabela na junção deve ser excluída é colocado entre DELETEe FROM.
  • UPDATEpermite que uma FROMcláusula seja adicionada. A tabela a ser atualizada pode ser unida na FROMcláusula e referenciada por alias ou referenciada apenas no início da instrução de acordo com o SQL padrão.

Este exemplo exclui todos os usersque foram sinalizados com o sinalizador 'Ocioso'.

DELETE u
  FROM users AS u
  INNER JOIN user_flags AS f
    ON u.id = f.id
    WHERE f.name = 'idle';

BULK INSERT

BULKé uma instrução Transact-SQL que implementa um processo de carregamento de dados em massa, inserindo várias linhas em uma tabela, lendo dados de um arquivo sequencial externo. Uso de BULK INSERTresultados em melhor desempenho do que processos que emitem INSERTdeclarações individuais para cada linha a ser adicionada. Detalhes adicionais estão disponíveis no MSDN .

TENTAR PEGAR

A partir do SQL Server 2005, a Microsoft introduziu TRY CATCHlógica adicional para oferecer suporte ao comportamento do tipo de exceção. Esse comportamento permite que os desenvolvedores simplifiquem seu código e deixem de @@ERRORverificar a verificação após cada instrução de execução SQL.

-- begin transaction
BEGIN TRAN;

BEGIN TRY
   -- execute each statement
   INSERT INTO MYTABLE(NAME) VALUES ('ABC');
   INSERT INTO MYTABLE(NAME) VALUES ('123');

   -- commit the transaction
   COMMIT TRAN;
END TRY
BEGIN CATCH
   -- roll back the transaction because of error
   ROLLBACK TRAN;
END CATCH;

Veja também

Referências

links externos