Guia Prático de SQL Server: Comandos, Funções e Cursores
Enviado por Elvis Venancio e classificado em Inglês
Escrito em em
português com um tamanho de 4,77 KB
Comandos DML Básicos
INSERT INTO tabela VALUES ('valor1', valor2, valorn)
DELETE FROM tabela WHERE condição
UPDATE tabela SET campo1 = valor1 WHERE condição
SELECT FROM tabela WHERE condição GROUP BY campo(s)
HAVING condição ORDER BY campo(s)
SELECT REPLICATE(nome, 2) FROM Cliente
Operadores e Funções de Agregação
BETWEEN / LIKE / IN / DISTINCT / TOP / ORDER BY
COUNT / SUM / AVG / MAX / MIN
Tipos de JOIN
INNER JOIN, FULL JOIN, RIGHT JOIN, LEFT JOIN
Subconsulta no SELECT
SELECT setores.*, (SELECT COUNT(*) FROM funcionarios WHERE funcionarios.setor_id = setores.setor_id) AS "Total de Funcionários" FROM setores
Tabela Temporária
SELECT * INTO #TabTemp FROM funcionarios
Variáveis e Estruturas Condicionais
DECLARE @qtd INT
SET @qtd = (SELECT SUM(quantidade) FROM Midias)
IF @qtd > 20
PRINT 'Pode abrir a locadora'
ELSE
BEGIN
PRINT 'Acho que você....'
PRINT 'Terá que comprar mais filmes...'
END
CASE WHEN
SELECT func_nome, func_salario,
CASE
WHEN func_salario >= 0 AND func_salario <= 500 THEN 'Assalariado'
WHEN func_salario > 500 AND func_salario <= 2000 THEN 'Salário padrão'
WHEN func_salario > 2000 THEN 'Cargo de confiança'
ELSE 'Salário negativo!!!!???'
END AS "Situação"
FROM funcionarios
Stored Procedures
CREATE PROCEDURE sp_calcula
(
@valor1 INT,
@valor2 INT,
@resultado INT OUTPUT
)
AS
BEGIN
SET @resultado = @valor1 + @valor2
END
DECLARE @resultado INT
EXECUTE sp_calcula 5, 7, @resultado OUTPUT
PRINT 'Resultado: ' + CAST(@resultado AS VARCHAR)
Triggers
CREATE TRIGGER trg_onInsertValue ON Funcionarios
FOR INSERT
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted) = 1
PRINT 'Registro inserido com sucesso!!!'
IF (SELECT COUNT(*) FROM inserted) > 1
BEGIN
PRINT 'Impossível incluir mais de 1 funcionário por vez'
ROLLBACK TRAN
END
END
Observação: INSERTED e DELETED são tabelas virtuais disponíveis dentro de triggers.
Funções com Retorno de Tabela
CREATE FUNCTION fnc_RetornaTabelaFuncionarios
(
@p_salario_inicial DECIMAL(10,2),
@p_salario_final DECIMAL(10,2)
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM funcionarios
WHERE func_salario BETWEEN @p_salario_inicial AND @p_salario_final
)
SELECT *
FROM dbo.fnc_RetornaTabelaFuncionarios(500, 1000)
WHERE gerente_id = 1
Cursores
Cursor básico
DECLARE @func_nome VARCHAR(50)
DECLARE cursor_teste CURSOR FOR
SELECT func_nome FROM funcionarios WHERE func_nome LIKE '%d%'
OPEN cursor_teste
FETCH NEXT FROM cursor_teste INTO @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Nome: ' + @func_nome
FETCH NEXT FROM cursor_teste INTO @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste
Cursor com atualização
DECLARE @func_id INT
DECLARE @func_nome VARCHAR(50)
DECLARE cursor_teste CURSOR FOR SELECT func_id, func_nome FROM funcionarios
OPEN cursor_teste
FETCH NEXT FROM cursor_teste INTO @func_id, @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX('k', @func_nome) != 0
BEGIN
SET @func_nome = @func_nome + ' Souza' -- se tiver a letra k no nome
UPDATE funcionarios
SET func_nome = @func_nome
WHERE CURRENT OF cursor_teste
END
PRINT CAST(@func_id AS VARCHAR(5)) + ' ' + @func_nome
FETCH NEXT FROM cursor_teste INTO @func_id, @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste
Cursor SCROLL (percorrendo de trás para frente)
DECLARE @func_id INT
DECLARE @func_nome VARCHAR(50)
DECLARE cursor_teste SCROLL CURSOR FOR
SELECT func_id, func_nome FROM funcionarios
OPEN cursor_teste
FETCH LAST FROM cursor_teste INTO @func_id, @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CAST(@func_id AS VARCHAR(5)) + ' ' + @func_nome
FETCH PRIOR FROM cursor_teste INTO @func_id, @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste