Database
 sql >> Base de Dados >  >> RDS >> Database

Comando de coisas T-SQL


A ideia principal em torno da função do SQL Server chamada STUFF é concatenar várias colunas em uma única coluna com mais flexibilidade do que a função CONCAT forneceria. Além disso, o STUFF pode ser combinado com outras técnicas para alguns efeitos interessantes.

Neste artigo, exploraremos as possibilidades que o comando STUFF oferece para especialistas em Banco de Dados SQL.

A função T-SQL STUFF


Vamos primeiro dar uma olhada na definição oficial da Microsoft da função STUFF:

A função STUFF insere uma string em outra string. Ele exclui um comprimento especificado de caracteres na primeira string na posição inicial e, em seguida, insere a segunda string na primeira string na posição inicial.

Assim, ao usar o comando STUFF, você está reorganizando os dados da coluna.

Vejamos alguns exemplos.

A primeira é a saída do comando STUFF – a string ABCDEFG original será preenchida com a string XXX.
SELECT STUFF('ABCDEFG',3,3,'XXX');

Analisaremos essa saída para entender completamente o comando STUFF:

Agora, o terceiro parâmetro é aumentado para valores de 4,5,6.
SELECT STUFF('ABCDEFG',3,4,'XXX');
SELECT STUFF('ABCDEFG',3,5,'XXX');
SELECT STUFF('ABCDEFG',3,6,'XXX');

Explicações da chamada de função


A substituição acontece no terceiro caractere da string ABCDEFG original em cada execução. A única diferença é o número de caracteres especificados para excluir por meio do parâmetro de comprimento de exclusão .

Assim, quando o excluir comprimento parâmetro da posição inicial for maior que a string original, os dados serão truncados.

Por exemplo, nossa string original tem 7 caracteres. A função STUFF começa na posição 3 e é executada por mais 5 caracteres. Como 8 é maior que o comprimento da string original de 7, o valor é retornado como ABXXX.

Uso múltiplo de STUFF na mesma consulta


Você pode aninhar o comando STUFF em outro comando STUFF e utilizá-lo quantas vezes forem necessárias. No entanto, você deve considerar como isso afeta as consultas de nível de produção. Cada chamada aninhada está sendo executada para cada linha dos dados retornados.
SELECT STUFF(STUFF('ABCDEFG',1,1,'1'),7,1,'7') as StuffExample5;

Neste exemplo, o primeiro caractere da string original é substituído pelo caractere 1 e o último é substituído pelo caractere 7.

STUFF e ForXML


ForXML é um recurso do SQL Server que pode transformar os conjuntos de resultados de consultas SQL em resultados formatados em XML.

O STUFF também pode ser combinado com outras funcionalidades do SQL Server, como ForXML. Ele ajuda a consolidar dados para fins de relatório. Vamos pegar a seguinte estrutura de tabela:

Suponha que você queira um relatório com 2 colunas. A primeira coluna é USER_NAME , e o segundo é um papel separado por vírgulas coluna para cada função que o usuário possui. Como isso poderia ser feito em T-SQL puro?

Construa a estrutura da tabela e insira os dados:
CREATE TABLE 
#USER
(
USER_ID INT,
USER_NAME VARCHAR(50)
)

CREATE TABLE
#USER_ROLES
(
USER_ID INT,
ROLE VARCHAR(50)
)


INSERT INTO #USER VALUES(1,'Edward')
INSERT INTO #USER VALUES(2,'John')
INSERT INTO #USER VALUES(3,'Mark')

INSERT INTO #USER_ROLES VALUES(1,'Admin')
INSERT INTO #USER_ROLES VALUES(1,'Writer')
INSERT INTO #USER_ROLES VALUES(1,'Form')
INSERT INTO #USER_ROLES VALUES(2,'Writer')
INSERT INTO #USER_ROLES VALUES(3,'Form')
INSERT INTO #USER_ROLES VALUES(3,'Writer');

Use o comando STUFF:
SELECT 
   U.USER_NAME,
   STUFF((SELECT ',' + UR.ROLE 
          FROM #USER_ROLES UR
          WHERE UR.USER_ID = U.USER_ID
          FOR XML PATH('')), 1, 1, '') [ROLES]
FROM #USER U
GROUP BY U.USER_NAME, U.USER_ID
ORDER BY 1

Neste exemplo, uma consulta interna é associada a cada USER_ID. O comando STUFF é usado para substituir a vírgula inicial. Como resultado, temos uma boa lista separada por vírgulas de cada usuário com as respectivas funções.

Casos de uso


Mascaramento de dados

O SQL Server fornece soluções para mascaramento de dados dinâmicos. No entanto, STUFF pode ser usado para ofuscar dados confidenciais quando exibidos. Imagine uma exibição em cima de uma tabela que tenha campos de PII do cliente, como SSN. A exibição pode usar o comando STUFF para mascarar tudo, exceto os últimos 4 dígitos do SSN.

Consolidação de dados

Conforme demonstrado com FORXML e STUFF, o T-SQL oferece a capacidade de consolidar dados em colunas únicas com algum tipo de identificador primário. Neste exemplo, foi o USER_NAME. No entanto, esse tipo de análise é bastante comum na arquitetura de relatórios de banco de dados.

Resumo


Assim, abordamos os parâmetros do comando STUFF no T-SQL e entendemos como esse comando se compara ao CONCAT. Demonstramos exemplos simples e complexos do comando STUFF e listamos alguns casos de uso para os quais o STUFF pode ser aplicável.

É um comando valioso que pode ser uma ótima ferramenta para se ter em mãos. Por favor, comente com outros casos de uso para o comando STUFF.