Sabia que uma função STRING_SPLIT nativa incorporada no SQL Server foi adicionada ao SQL Server 2016? Como consultor, vejo tanto código que chamam a uma função escalar que são usados para dividir variáveis delimitadas por strings numa lista utilizável. Para aqueles que utilizam este método, sugiro que olhem para esta função. STRING_SPLIT é uma função de valor de tabela que retorna uma única coluna dos valores da sua string dividida pelo delimitador. Este é um bit incomum de T-SQL, na medida em que o nível de compatibilidade 130 ou superior é necessário para a sua utilização (a Microsoft não quis induzir alterações de quebra no código de utilizador existente). A utilização deste método é muito mais eficiente e pode ser executada sem chamar uma função escalar.

A sintaxe

STRING_SPLIT ( string , separador)

Como utilizá-lo

SELECT value AS 'Flavor' FROM STRING_SPLIT('Chocolate,Vanilla,Strawberry', ',');

Resultados

O Plano

Aqui está o aspecto do plano. É muito simples e directo.

Função Personalizada

p>Agora é uma versão caseira que se pode encontrar em alguns ambientes. Pode ver a sua muito menos eficiente.

/****** Object: UserDefinedFunction . Script Date: 2/11/2020 6:26:45 PM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION .( @sInputList VARCHAR(8000) -- List of delimited items , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items) RETURNS @List TABLE (item VARCHAR(8000))BEGINDECLARE @sItem VARCHAR(8000)WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0 BEGIN SELECT @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))), @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList)))) IF LEN(@sItem) > 0 INSERT INTO @List SELECT @sItem ENDIF LEN(@sInputList) > 0 INSERT INTO @List SELECT @sInputList -- Put the last item inRETURNEND

Os Resultados

Resultados são os mesmos. Mas note que o nome do seu campo será sempre o mesmo, com a nova função obtém-se um pouco mais de flexibilidade nisto.

O Plano

É um pouco mais complicado do que o directo que vimos acima, incluindo uma sequência.

Há muitas maneiras diferentes de escrever uma função dividida para fazer as coisas funcionarem, contudo, agora que o SQL Server nos deu uma, encorajo-vos vivamente a darem uma vista de olhos. Ao afinar o desempenho, não se esqueça de dar uma vista de olhos ao que sempre fez no seu código e procure formas de o melhorar, como esta. Pode saber mais e ver mais exemplos aqui em docs.microsoft.com.

Contacte o Autor | Contacte o DCAC

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *