Fala pessoal!
Nesse post eu gostaria de compartilhar com vocês as fotos e materiais da minha apresentação no GPDI Data and Tech 2019 em Fortaleza / Ceará, organizado pelo Rafael Mendonça. E foi um prazer conhecer essa galera irada do GPDI e de Fortaleza. É sempre um prazer compartilhar conhecimento sobre aquilo que a gente gosta e tentar trazer alguma novidade e/ou coisas diferentes do que as pessoas já conheciam.
A minha palestra foi sobre o tema “SQLCLR: Transformando seu SQL Server em algo muito além de um banco de dados”, onde pude explicar para os participantes do evento o que é o SQLCLR, como ele funciona, o que podemos fazer com ele, quais suas vantagens e desvantagens, parte de segurança, benefícios de performance (que são muitos e MUITO significativos) e, é claro, uma demo de quase 20 mins mostrando vários recursos incríveis que podemos utilizar dentro do SQL Server com esse recurso.
Slides e Demo da minha palestra
Script da DEMO utilizada (é necessário ter a minha biblioteca instalada):
-- Serviços e Processos
EXEC CLR.dbo.stpServicos_Listar
@Ds_Servidor = N'dirceu-notebook', -- nvarchar(max)
@Ds_Servico = N'SQL Server%' -- nvarchar(max)
EXEC CLR.dbo.stpProcessos_Listar
@Ds_Servidor = N'dirceu-notebook' -- nvarchar(max)
SELECT * FROM CLR.dbo.fncServicos_Listar('dirceu-notebook')
SELECT * FROM CLR.dbo.fncProcessos_Listar('dirceu-notebook') WHERE Ds_Processo LIKE 'sql%'
SELECT * FROM CLR.dbo.fncProcessos_Listar('dirceu-notebook') WHERE Ds_Processo = 'notepad.exe'
EXEC CLR.dbo.stpProcessos_Eliminar
@Nr_PID = 17136 -- int
-- SERVER INFO
SELECT * FROM CLR.dbo.fncDBA_Informacao_Disco('dirceu-notebook')
SELECT * FROM CLR.dbo.fncDBA_Server_Info('dirceu-notebook')
SELECT * FROM CLR.dbo.fncDBA_Server_Info_Instancias('dirceu-notebook')
SELECT * FROM CLR.dbo.fncDBA_Server_Info_Minimal('dirceu-notebook')
SELECT * FROM CLR.dbo.fncEvent_Viewer_Listar('dirceu-notebook', 'Application', '2019-05-31', '2019-06-02')
EXEC CLR.dbo.stpEvent_Viewer_Gravar
@Ds_Servidor = N'dirceu-notebook', -- nvarchar(max)
@Ds_Tipo_Log = N'Application', -- nvarchar(max)
@Ds_Tipo_Evento = N'Information', -- nvarchar(max)
@Ds_Fonte = N'SQLCLR', -- nvarchar(max)
@Ds_Mensagem = N'Teste de mensagem do SQLCLR ', -- nvarchar(max)
@Id_Evento = 1234 -- int
SELECT *
FROM CLR.dbo.fncEvent_Viewer_Listar('dirceu-notebook', 'Application', '2019-05-01', '2019-06-02')
WHERE Ds_Fonte = 'SQLCLR'
-- WEB
SELECT * FROM CLR.dbo.fncFeriados(2019, 'CE', 'Fortaleza')
EXEC CLR.dbo.stpEnvia_Torpedo_Pushbullet
@Nr_Numero = N'+552798888888888', -- nvarchar(max)
@Ds_Mensagem = N'Teste SQLCLR' -- nvarchar(max)
EXEC CLR.dbo.stpDownload_Arquivo_Remoto
@URL = N'/wp-content/uploads/2016/09/Pushbullet-API-send-sms-to-smartphone-php-csharp-java-sql-server-clr-3.jpg', -- nvarchar(max)
@strArquivoDestino = N'C:\Temporario\Minha imagem.jpg', -- nvarchar(max)
@usuario = N'', -- nvarchar(max)
@senha = N'' -- nvarchar(max)
EXEC CLR.dbo.stpCompacta_Arquivo
@caminho = N'C:\Temporario\', -- nvarchar(max)
@filtro = N'*.jpg', -- nvarchar(max)
@arquivoCompactado = N'C:\Temporario\Meu Arquivo.zip', -- nvarchar(max)
@nivelCompactacao = 5, -- int
@senha = N'dirceu' -- nvarchar(max)
CREATE OR ALTER PROCEDURE dbo.stpProcedure_Criptografada
WITH encryption
AS
BEGIN
SELECT 1
PRINT 'Teste de procedure criptografada'
END
sp_helptext 'dbo.stpProcedure_Criptografada'
PRINT CLR.dbo.fncDescriptografa_Objeto('dirceu-notebook\sql2017', 'master', 'dbo', 'stpProcedure_Criptografada')
DECLARE @Ds_Retorno_OUTPUT NVARCHAR(MAX);
EXEC CLR.dbo.stpWs_Requisicao
@Ds_Url = N'https://rastrojs.herokuapp.com/track/PU187010046BR/json', -- nvarchar(max)
@Ds_Metodo = N'GET', -- nvarchar(max)
@Ds_Parametros = N'', -- nvarchar(max)
@Ds_Codificacao = N'utf-8', -- nvarchar(max)
@Ds_Accept = N'', -- nvarchar(max)
@Ds_ContentType = N'application/json', -- nvarchar(max)
@Fl_Autentica_Proxy = 0, -- bit
@Ds_Headers = N'', -- nvarchar(max)
@Qt_Segundos_Timeout = 20, -- int
@Ds_Retorno_OUTPUT = @Ds_Retorno_OUTPUT OUTPUT -- nvarchar(max)
SELECT
jsonImportado.code,
jsonImportado.[message],
arrData.isDelivered,
arrData.postedAt,
arrData.updatedAt,
arrTrack.[status],
arrTrack.observation,
arrTrack.trackedAt,
arrTrack.unit
FROM OPENJSON(@Ds_Retorno_OUTPUT, '$') WITH (
[code] INT,
[message] VARCHAR(100),
[data] NVARCHAR(MAX) AS JSON
) AS jsonImportado
OUTER APPLY OPENJSON(jsonImportado.[data]) WITH (
isDelivered VARCHAR(10),
postedAt DATETIME,
updatedAt DATETIME,
[track] NVARCHAR(MAX) AS JSON
) AS arrData
OUTER APPLY OPENJSON(arrData.track) WITH (
[status] VARCHAR(50),
observation VARCHAR(500),
trackedAt DATETIME,
[unit] VARCHAR(100)
) AS arrTrack
-- ARQUIVOS
SELECT * FROM CLR.dbo.fncArquivo_Listar('C:\Temporario', '*', 0)
SELECT * FROM CLR.dbo.fncArquivo_Ler('C:\Temporario\Injection.txt')
IF (OBJECT_ID('tempdb..##Teste') IS NOT NULL) DROP TABLE ##Teste
EXEC CLR.dbo.stpImporta_CSV2
@Ds_Caminho_Arquivo = N'C:\Temporario\FL_insurance_sample.csv', -- nvarchar(max)
@Ds_Separador = N',', -- nvarchar(max)
@Fl_Primeira_Linha_Cabecalho = 1, -- bit
@Nr_Linha_Inicio = 0, -- int
@Nr_Linhas_Retirar_Final = 0, -- int
@Ds_Tabela_Destino = '##Teste', -- nvarchar(max)
@Ds_Codificacao = N'utf-8' -- nvarchar(max)
SELECT * FROM ##Teste
EXEC CLR.dbo.stpImporta_Excel2
@Caminho = N'C:\Temporario\Planilha.xlsx', -- nvarchar(max)
@Aba = N'Plan1', -- nvarchar(max)
@Colunas = N'*' -- nvarchar(max)
EXEC CLR.dbo.stpExporta_Query_Txt
@query = N'SELECT * FROM sys.objects', -- nvarchar(max)
@separador = N'|', -- nvarchar(max)
@caminho = N'C:\Temporario\objects.csv', -- nvarchar(max)
@Fl_Coluna = 1 -- int
EXEC CLR.dbo.stpRenomeia_Arquivo
@Caminho_Origem = N'C:\Temporario\objects.csv', -- nvarchar(max)
@Caminho_Destino = N'C:\Temporario\objetos.csv', -- nvarchar(max)
@Fl_Sobrescrever = 1 -- bit
EXEC CLR.dbo.stpCopia_Arquivo
@origem = N'C:\Temporario\objetos.csv', -- nvarchar(max)
@destino = N'C:\Temporario\objetos2.csv', -- nvarchar(max)
@sobrescrever = 1 -- bit
EXEC CLR.dbo.stpApaga_Arquivo
@caminho = N'C:\Temporario\objetos.csv' -- nvarchar(max)
SELECT
CLR.dbo.fncArquivo_Tamanho('C:\Temporario\objetos2.csv'),
CLR.dbo.fncArquivo_Tamanho_Disco('C:\Temporario\objetos2.csv'),
CLR.dbo.fncArquivo_Existe('C:\Temporario\objetos2.csv'),
CLR.dbo.fncArquivo_Existe('C:\Temporario\objetos.csv')
SELECT * FROM CLR.dbo.fncArquivo_Ler('C:\Temporario\objetos2.csv')
Caso você tenha se interessado em aprender mais sobre o SQLCLR e como extender as funcionalidades do SQL Server utilizando C#/VB.NET, recomendo a leitura do meu artigo Introdução ao SQL CLR (Common Language Runtime) no SQL Server, onde explico todos os conceitos do SQLCLR (como fiz nessa palestra) e demonstro como criar sua primeira biblioteca do SQLCLR até a publicação e utilização do seu projeto no SQL Server.
Muito em breve, estarei disponibilizando no GitHub, o código-fonte da minha biblioteca do SQLCLR, que utilizo em alguns clientes e também nessas demos que apresento em minhas palestras.. Fiquem ligados para acompanhar essa novidade e começar a aumentar (e muito) a sua produtividade no dia a dia.
Galera de Fotos do Evento
Mais uma vez, foi um grande prazer conhecer Fortaleza e palestrar nesse evento.
Um grande abraço e até o próximo post!
Comentários (0)
Carregando comentários…