Last active
June 16, 2025 00:38
-
-
Save pagueru/c84acb4efa06bc4cb51c815c613224ea to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ==================================================================== | |
-- CONSULTA COMPLETA PARA TESTE DE COLORAÇÃO SQL SERVER | |
-- Testa todos os elementos de sintaxe possíveis | |
-- ==================================================================== | |
-- Script gerado com Claude Sonnet 4 usando o seguinte prompt: | |
-- "Gere um arquivo `.sql` no formato T-SQL para SQL Server que utilize diferentes recursos de queries, | |
-- com o objetivo de testar todas as variações de cores aplicadas a objetos SQL e instruções. | |
-- Ou seja, estou testando um tema ou formatador de código." | |
-- Declaração de variáveis com diferentes tipos de dados | |
DECLARE @id INT = 100, | |
@nome NVARCHAR(255) = N'João da Silva', | |
@data_nascimento DATETIME2 = '1990-05-15 14:30:00', | |
@salario DECIMAL(10,2) = 5500.75, | |
@ativo BIT = 1, | |
@xml_data XML = '<root><item>test</item></root>', | |
@json_data NVARCHAR(MAX) = N'{"nome": "teste", "valor": 123}', | |
@uuid UNIQUEIDENTIFIER = NEWID(), | |
@contador BIGINT = 0; | |
-- Criação de tabela temporária com constraints | |
CREATE TABLE #temp_funcionarios ( | |
id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, | |
nome NVARCHAR(100) NOT NULL, | |
email VARCHAR(255) UNIQUE, | |
departamento_id INT FOREIGN KEY REFERENCES departamentos(id), | |
salario MONEY DEFAULT 0.00, | |
data_admissao DATE CHECK (data_admissao >= '2000-01-01'), | |
INDEX IX_temp_funcionarios_departamento NONCLUSTERED (departamento_id) | |
); | |
-- CTE (Common Table Expression) recursiva | |
WITH funcionarios_hierarquia AS ( | |
-- Âncora da recursão | |
SELECT | |
id, | |
nome, | |
gerente_id, | |
0 AS nivel, | |
CAST(nome AS NVARCHAR(1000)) AS caminho | |
FROM funcionarios | |
WHERE gerente_id IS NULL | |
UNION ALL | |
-- Parte recursiva | |
SELECT | |
f.id, | |
f.nome, | |
f.gerente_id, | |
fh.nivel + 1, | |
CAST(fh.caminho + ' -> ' + f.nome AS NVARCHAR(1000)) | |
FROM funcionarios f | |
INNER JOIN funcionarios_hierarquia fh ON f.gerente_id = fh.id | |
WHERE fh.nivel < 10 -- Limite de recursão | |
), | |
-- Segunda CTE para estatísticas | |
estatisticas_departamento AS ( | |
SELECT | |
d.nome AS departamento, | |
COUNT(*) AS total_funcionarios, | |
AVG(CAST(f.salario AS FLOAT)) AS salario_medio, | |
MIN(f.data_admissao) AS primeira_admissao, | |
MAX(f.data_admissao) AS ultima_admissao | |
FROM departamentos d | |
LEFT JOIN funcionarios f ON d.id = f.departamento_id | |
GROUP BY d.id, d.nome | |
HAVING COUNT(*) > 0 | |
) | |
-- Query principal com múltiplas operações | |
SELECT DISTINCT | |
-- Colunas com aliases e funções | |
ROW_NUMBER() OVER (PARTITION BY f.departamento_id ORDER BY f.salario DESC) AS ranking, | |
DENSE_RANK() OVER (ORDER BY f.salario DESC) AS ranking_geral, | |
f.id AS funcionario_id, | |
UPPER(f.nome) AS nome_maiusculo, | |
LOWER(f.email) AS email_minusculo, | |
CONCAT(f.nome, ' - ', d.nome) AS funcionario_departamento, | |
-- Funções de data | |
YEAR(f.data_admissao) AS ano_admissao, | |
MONTH(f.data_admissao) AS mes_admissao, | |
DATEDIFF(YEAR, f.data_admissao, GETDATE()) AS anos_empresa, | |
FORMAT(f.data_admissao, 'dd/MM/yyyy') AS data_formatada, | |
-- Funções matemáticas e de string | |
ROUND(f.salario * 1.15, 2) AS salario_reajustado, | |
ABS(f.salario - ed.salario_medio) AS diferenca_media, | |
SQRT(POWER(f.salario, 2)) AS salario_absoluto, | |
LEFT(f.nome, 10) AS nome_abreviado, | |
RIGHT(f.email, 10) AS final_email, | |
SUBSTRING(f.nome, 1, CHARINDEX(' ', f.nome + ' ') - 1) AS primeiro_nome, | |
LEN(TRIM(f.nome)) AS tamanho_nome, | |
-- Expressões condicionais | |
CASE | |
WHEN f.salario > 10000 THEN 'Alto' | |
WHEN f.salario BETWEEN 5000 AND 10000 THEN 'Médio' | |
WHEN f.salario < 5000 AND f.salario > 0 THEN 'Baixo' | |
ELSE 'Não informado' | |
END AS faixa_salarial, | |
IIF(f.ativo = 1, 'Ativo', 'Inativo') AS status_funcionario, | |
COALESCE(f.telefone, f.celular, 'Sem contato') AS contato_principal, | |
NULLIF(f.bonus, 0) AS bonus_valido, | |
ISNULL(f.comissao, 0.00) AS comissao_ou_zero, | |
-- Subconsultas | |
(SELECT COUNT(*) FROM projetos p WHERE p.responsavel_id = f.id) AS total_projetos, | |
(SELECT TOP 1 nome FROM projetos WHERE responsavel_id = f.id ORDER BY data_inicio DESC) AS ultimo_projeto, | |
-- Funções de conversão | |
CAST(f.salario AS VARCHAR(20)) AS salario_texto, | |
CONVERT(VARCHAR(10), f.data_admissao, 103) AS data_br, | |
TRY_CAST(f.observacoes AS INT) AS observacoes_numericas, | |
TRY_CONVERT(DATETIME, f.ultima_atualizacao) AS data_atualizacao, | |
-- Funções específicas do SQL Server | |
NEWID() AS guid_aleatorio, | |
@@SERVERNAME AS servidor, | |
SYSTEM_USER AS usuario_sistema, | |
DB_NAME() AS banco_atual, | |
OBJECT_NAME(f.id) AS nome_objeto | |
FROM funcionarios f WITH (NOLOCK) | |
INNER JOIN departamentos d ON f.departamento_id = d.id | |
LEFT OUTER JOIN enderecos e ON f.id = e.funcionario_id | |
RIGHT JOIN cargos c ON f.cargo_id = c.id | |
FULL OUTER JOIN funcionarios_hierarquia fh ON f.id = fh.id | |
CROSS JOIN (SELECT COUNT(*) AS total FROM funcionarios) AS totais | |
INNER JOIN estatisticas_departamento ed ON d.nome = ed.departamento | |
WHERE | |
-- Condições diversas | |
f.ativo = 1 | |
AND f.data_admissao >= '2020-01-01' | |
AND f.salario BETWEEN 3000.00 AND 50000.00 | |
AND (f.nome LIKE '%Silva%' OR f.nome LIKE '%Santos%') | |
AND f.email NOT LIKE '%temp%' | |
AND f.departamento_id IN (1, 2, 3, 5, 8) | |
AND f.cargo_id NOT IN (SELECT id FROM cargos WHERE ativo = 0) | |
AND EXISTS (SELECT 1 FROM projetos WHERE responsavel_id = f.id) | |
AND NOT EXISTS (SELECT 1 FROM licencas WHERE funcionario_id = f.id AND ativa = 1) | |
AND f.gerente_id IS NOT NULL | |
AND f.comissao IS NULL OR f.comissao > 0 | |
GROUP BY | |
f.id, f.nome, f.email, f.salario, f.data_admissao, f.departamento_id, | |
d.nome, f.ativo, f.telefone, f.celular, f.bonus, f.comissao, | |
f.observacoes, f.ultima_atualizacao, f.cargo_id, f.gerente_id, | |
ed.salario_medio | |
HAVING | |
COUNT(DISTINCT e.id) >= 1 | |
AND AVG(CAST(f.salario AS FLOAT)) > 4000 | |
AND SUM(ISNULL(f.bonus, 0)) < 10000 | |
ORDER BY | |
f.departamento_id ASC, | |
f.salario DESC, | |
f.nome ASC | |
OFFSET 0 ROWS | |
FETCH NEXT 100 ROWS ONLY; | |
-- Operações adicionais para testar mais elementos | |
-- INSERT com diferentes sintaxes | |
INSERT INTO #temp_funcionarios (nome, email, salario) | |
VALUES | |
('Ana Costa', '[email protected]', 4500.00), | |
('Carlos Lima', '[email protected]', 5200.00); | |
INSERT INTO #temp_funcionarios (nome, email, salario) | |
SELECT nome, email, salario | |
FROM funcionarios | |
WHERE departamento_id = 1; | |
-- UPDATE com JOIN | |
UPDATE f SET | |
salario = f.salario * 1.10, | |
ultima_atualizacao = GETDATE() | |
FROM funcionarios f | |
INNER JOIN departamentos d ON f.departamento_id = d.id | |
WHERE d.nome = 'Vendas' AND f.ativo = 1; | |
-- DELETE com condições complexas | |
DELETE FROM funcionarios | |
WHERE id IN ( | |
SELECT f.id | |
FROM funcionarios f | |
LEFT JOIN projetos p ON f.id = p.responsavel_id | |
WHERE f.ativo = 0 AND p.id IS NULL | |
); | |
-- MERGE (UPSERT) | |
MERGE funcionarios AS target | |
USING ( | |
SELECT nome, email, salario FROM #temp_funcionarios | |
) AS source (nome, email, salario) | |
ON target.email = source.email | |
WHEN MATCHED THEN | |
UPDATE SET salario = source.salario | |
WHEN NOT MATCHED THEN | |
INSERT (nome, email, salario) | |
VALUES (source.nome, source.email, source.salario); | |
-- Stored Procedure com parâmetros | |
EXEC sp_buscar_funcionarios | |
@departamento = 'TI', | |
@salario_minimo = 5000.00, | |
@incluir_inativos = 0; | |
-- Função definida pelo usuário | |
SELECT dbo.fn_calcular_bonus(salario, tempo_empresa) AS bonus_calculado | |
FROM funcionarios; | |
-- Transação com tratamento de erro | |
BEGIN TRY | |
BEGIN TRANSACTION; | |
UPDATE funcionarios SET salario = salario * 1.05; | |
IF @@ROWCOUNT = 0 | |
THROW 50001, 'Nenhum funcionário foi atualizado', 1; | |
COMMIT TRANSACTION; | |
END TRY | |
BEGIN CATCH | |
IF @@TRANCOUNT > 0 | |
ROLLBACK TRANSACTION; | |
DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE(); | |
DECLARE @ErrorSeverity INT = ERROR_SEVERITY(); | |
DECLARE @ErrorState INT = ERROR_STATE(); | |
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState); | |
END CATCH; | |
-- Limpeza | |
DROP TABLE IF EXISTS #temp_funcionarios; | |
-- Comentário final para teste de coloração | |
/* Esta consulta testa: | |
- Palavras-chave (SELECT, FROM, WHERE, etc.) | |
- Tipos de dados (INT, VARCHAR, DATETIME, etc.) | |
- Funções built-in (COUNT, AVG, GETDATE, etc.) | |
- Operadores (+, -, *, /, =, <>, etc.) | |
- Literais de string ('texto', N'unicode') | |
- Literais numéricos (123, 45.67) | |
- Comentários (-- e /* */) | |
- Identificadores (nomes de tabelas e colunas) | |
- Caracteres especiais (@, #, [], etc.) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment