Este artigo agrupa diversos conteúdos que produzi sobre o uso do SQL Server 2017 em aplicações .NET, bem como dicas úteis para desenvolvedores que empreguem esta tecnologia relacional em seus projetos.
SQL Operations Studio: ferramenta multiplataforma para gerenciamento
Alternativa mais leve que o Management Studio para gerenciamento de recursos do SQL Server, Azure SQL Database e AzureSQL Data Warehouse, o SQL Operations Studio é uma solução multiplataforma compatível com Linux e macOS, além de Windows. Vale a pena destacar que este utilitário conta ainda com funcionalidades como exportação para Excel e JSON, além de suporte a ferramentas de linha de comando como PowerShell, Bash, sqlcmd e bcp.
O uso do SQL Operations Studio já foi abordado inclusive em um evento online do Canal .NET:
E também em um artigo que publiquei neste link:
Suporte a Docker
A capacidade de execução de uma instância do SQL Server 2017 a partir de um container Docker é uma excelente alternativa para a montagem de ambientes para testes, além de trazer a possibilidade de uso de diferentes versões deste SGDB em uma mesma máquina.
O comando a seguir fará uso da imagem microsoft/mssql-server-linux:2017-latest para criar um container Linux baseado na versão Developer do SQL Server 2017, com o acesso à instância deste servidor acontecendo na porta 11433:
docker run --name testesqlserver2017 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=DockerSql2017!" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 11433:1433 -d microsoft/mssql-server-linux:2017-latest
Já a próxima instrução (docker ps) mostrará que a instância está executando na porta 11433:
Executando o comando a seguir para a instância criada:
SELECT @@VERSION PRINT @@VERSION
Teremos como resultado, a string:
Microsoft SQL Server 2017 (RTM-CU6) (KB4101464) — 14.0.3025.34 (X64)
Apr 9 2018 18:00:41
Copyright © 2017 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 16.04.4 LTS)
Suporte a JSON
A possibilidade de converter diretamente um conjunto de informações para o padrão JSON (presente desde a versão 2016 do SQL Server) evita a codificação de inúmeras classes em uma API REST criada em .NET, além de dispensar a execução de custosas operações de serialização/deserialização de objetos que seriam devolvidos como retorno do projeto considerado. No artigo a seguir, temos um exemplo disto utilizando o ASP.NET Core e o SQL Server 2017:
Para a gravação de dados no formato JSON, a recomendação é que se utilize uma coluna definida como NVARCHAR(MAX), informando-se em tais campos strings em conformidade com este padrão. O próximo script exemplifica isto por meio da coluna Detalhes:
CREATE TABLE dbo.LogErros( Id int IDENTITY(1,1) NOT NULL, Sistema varchar(50) NOT NULL, DataOcorrencia datetime NOT NULL, Detalhes nvarchar(max) NULL, CONSTRAINT PK_LogErros PRIMARY KEY (Id) ) GO
A recuperação de informações de uma coluna que contém dados em JSON é possível graças à função JSON_VALUE, bastando referenciar os diferentes níveis de um valor neste formato com o caracter “.” (ponto) — o primeiro nível sempre será indicado por “$” (cifrão). No exemplo a seguir, se observa o uso desta função tanto na recuperação de valores, quanto no filtro de uma query:
SELECT Id ,Sistema ,DataOcorrencia ,JSON_VALUE(Detalhes, '$.ClassName') AS TipoExcecao ,JSON_VALUE(Detalhes, '$.Message') AS Mensagem ,Detalhes FROM dbo.LogErros WHERE JSON_VALUE(Detalhes, '$.ClassName') = 'System.IO.FileNotFoundException'
Já a imagem seguinte traz um resultado da execução desta instrução:
Dynamic Data Masking: protegendo a exibição de dados sensíveis
O SQL Server conta desde a versão 2016 com um recurso chamado Dynamic Data Masking, o qual permite mascarar a visualização de informações de maneira rápida e sem grandes complicações. Este mecanismo se baseia na substituição de todo um conteúdo (ou partes deste) por caracteres específicos, garantindo assim a confidencialidade de dados sensíveis.
Já abordei o uso prático desta funcionalidade no seguinte artigo:
A função TRIM
Também acrescentada na versão 2016 do SQL Server, a função TRIM substitui finalmente o uso combinado de LTRIM e RTRIM na remoção de espaços adicionais nas extremidades de uma string. Este melhoramento simplificará em muito a codificação de instruções voltadas ao tratamento de textos.
Tomando como exemplo as instruções a seguir:
DECLARE @TEXTO_EXEMPLO VARCHAR(20) = ' Exemplo ' SELECT @TEXTO_EXEMPLO AS TextoExemplo, LEN(@TEXTO_EXEMPLO) AS TamanhoTextoExemplo, TRIM(@TEXTO_EXEMPLO) AS TextoExemploTratado, LEN(TRIM(@TEXTO_EXEMPLO)) AS TamanhoTextoExemploTratado
Teremos como resultado:
Boa parte destes mesmos tópicos foram cobertos em outro evento online do Canal .NET: