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
, SET
e 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 BEGIN
e END
, BREAK
, CONTINUE
, GOTO
, IF
e ELSE
, RETURN
, WAITFOR
, e WHILE
.
IF
e ELSE
permitir 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 @@DATEFIRST
configuração.)
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'It is the weekend.';
ELSE
PRINT 'It is a weekday.';
BEGIN
e END
marque um bloco de afirmações . Se mais de uma instrução deve ser controlada pela condicional no exemplo acima, podemos usar BEGIN
e END
assim:
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;
WAITFOR
irá 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.
BREAK
termina o WHILE
loop envolvente , enquanto CONTINUE
faz com que a próxima iteração do loop seja executada. Um exemplo de WHILE
loop é 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 DELETE
e UPDATE
são aprimoradas para permitir que os dados de outra tabela sejam usados na operação, sem a necessidade de uma subconsulta:
-
DELETE
aceita tabelas unidas naFROM
cláusula, de maneira semelhante aSELECT
. Quando isso é feito, o nome ou alias de qual tabela na junção deve ser excluída é colocado entreDELETE
eFROM
. -
UPDATE
permite que umaFROM
cláusula seja adicionada. A tabela a ser atualizada pode ser unida naFROM
clá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 users
que 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 INSERT
resultados em melhor desempenho do que processos que emitem INSERT
declaraçõ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 CATCH
ló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 @@ERROR
verificar 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
- Adaptive Server Enterprise (Sybase)
- PL / SQL (Oracle)
- PL / pgSQL (PostgreSQL)
- SQL / PSM (padrão ISO)
- Objetos Sys.sys
- Fluxo de Dados Tabular