Hola, chicos,
¡Buenas tardes!

En esta publicación, demostraré una función con valores de tabla realmente interesante que le permite dividir una cadena en una tabla de subcadenas usando un delimitador en SQL Server. ¿Qué quiere decir esto? Bueno, esto hace que parezca que tienes una cadena y la función transformará esta cadena en una tabla usando un separador. En esta tabla, cada registro será parte de la cadena en el índice i+1 y podrá trabajar fácilmente con estas subcadenas.

¿Interesado en aprender más sobre las divisiones?

Ejemplos de uso de la función.

SQL Server - fncSplitTexto Como quebrar um string em uma tabela de substrings utilizando um delimitador
SQL Server - fncSplitTexto Cómo dividir una cadena en una tabla de subcadenas usando un delimitador

Cómo implementar esto en su base de datos de SQL Server

Esta es la parte más interesante: ¡manos a la obra!
Ver código fuente

CREATE FUNCTION [dbo].[fncSplitTexto] (
    @Ds_Texto VARCHAR(MAX),
    @Ds_Delimitador VARCHAR(100)
)
RETURNS @Tabela_Palavras TABLE
(
    Id INT,
    Palavra VARCHAR(MAX)
)
AS
BEGIN

    DECLARE
        @Ds_String VARCHAR(MAX),
        @Ds_Palavra VARCHAR(MAX) = '',
        @Qt_Palavras INT = 1


    IF (LEN(@Ds_Texto) > 0)
       SET @Ds_Texto = @Ds_Texto + @Ds_Delimitador   

    
    WHILE (LEN(@Ds_Texto) > 0)
    BEGIN  
    
        
        SET @Ds_String = LTRIM(SUBSTRING(@Ds_Texto, 1, CHARINDEX(@Ds_Delimitador, @Ds_Texto) - 1))  


        IF (@Ds_Palavra = ' ')
            SET @Ds_Palavra = '' 
        
        
        IF ((@Qt_Palavras = 1 AND LEN(@Ds_Palavra) > 0) OR @Qt_Palavras > 1)
        BEGIN
            
            INSERT INTO @Tabela_Palavras ( Id, Palavra )
            VALUES ( @Qt_Palavras, @Ds_Palavra ) 
                
            SET @Qt_Palavras = @Qt_Palavras + 1
            
        END
        
        
        SET @Ds_Palavra = @Ds_String
        SET @Ds_Texto = SUBSTRING(@Ds_Texto, CHARINDEX(@Ds_Delimitador, @Ds_Texto) + 1, LEN(@Ds_Texto))
          
    END  


    -- Insere o resto do texto
    INSERT INTO @Tabela_Palavras ( Id, Palavra )
    VALUES ( @Qt_Palavras, @Ds_Palavra ) 


    RETURN


END

Creando la función con el CLR

Otra alternativa al uso de este recurso es a través de SQLCLR, un recurso que permite crear código .NET dentro de la base de datos y que generalmente logra un rendimiento mucho mejor que Transact-SQL. Si no conoces CLR, infórmate accediendo al post Introducción a SQL CLR (Common Language Runtime) en SQL Server.

Ver el código fuente de la función C# (CLR)
using System.Collections;
using System.Data.SqlTypes;

public partial class UserDefinedFunctions
{

    private class SplitTabela
    {

        public readonly SqlInt32 Id;
        public SqlString Ds_Palavra;

        public SplitTabela(SqlInt32 id, SqlString dsPalavra)
        {
            Id = id;
            Ds_Palavra = dsPalavra.IsNull ? "" : dsPalavra;
        }
    }

    [Microsoft.SqlServer.Server.SqlFunction(
        FillRowMethodName = "FillSplitTabela",
        TableDefinition = "Id INT, Ds_Palavra NVARCHAR(4000)"
    )]
    public static IEnumerable fncSplit_Tabela(string Ds_Texto, string Ds_Separador)
    {

        var splitTabelaCollection = new ArrayList();

        if (string.IsNullOrEmpty(Ds_Texto))
            return splitTabelaCollection;

        var arrPalavras = Ds_Texto.Trim().Split(Ds_Separador.ToCharArray());

        for (var index = 0; index < arrPalavras.Length; index++)
        {

            var palavra = arrPalavras[index];

            splitTabelaCollection.Add(new SplitTabela(
                (index + 1),
                palavra
            ));

        }

        return splitTabelaCollection;

    }

    protected static void FillSplitTabela(object objSplitTabela, out SqlInt32 id, out SqlString dsPalavra)
    {

        var splitTabela = (SplitTabela) objSplitTabela;

        id = splitTabela.Id;
        dsPalavra = splitTabela.Ds_Palavra.IsNull ? "" : splitTabela.Ds_Palavra;

    }

};

Sencillo y práctico, ¿verdad?
¡Abrazos!

servidor SQL función de tabla de consulta tsql dividir explota cadena de texto función de subcadena romper palabra usando delimitador delimitador

servidor SQL función de tabla de consulta tsql dividir explota cadena de texto función de subcadena romper palabra usando delimitador delimitador