Eu escrevi uma Função com valor de tabela no Microsoft SQL Server 2008 para obter uma coluna delimitada por vírgula em um banco de dados para cuspir linhas separadas para cada valor.
Ex: "um, dois, três, quatro" retornaria uma nova tabela com apenas uma coluna contendo os seguintes valores:
one
two
three
four
Esse código parece propenso a erros para vocês? Quando eu testo com
SELECT * FROM utvf_Split('one,two,three,four',',')
apenas funciona para sempre e nunca retorna nada. Isso está ficando realmente desanimador, especialmente porque não há funções divididas integradas no servidor MSSQL (POR QUE POR QUÊ ?!) e todas as funções semelhantes que encontrei na Web são lixo absoluto ou simplesmente irrelevantes para o que estou tentando fazer .
Aqui está a função:
USE *myDBname*
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR)
RETURNS @SplitValues TABLE
(
Asset_ID VARCHAR(MAX) NOT NULL
)
AS
BEGIN
DECLARE @FoundIndex INT
DECLARE @ReturnValue VARCHAR(MAX)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
WHILE (@FoundIndex <> 0)
BEGIN
DECLARE @NextFoundIndex INT
SET @NextFoundIndex = CHARINDEX(@delimiter, @String, @FoundIndex+1)
SET @ReturnValue = SUBSTRING(@String, @FoundIndex,@NextFoundIndex-@FoundIndex)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
INSERT @SplitValues (Asset_ID) VALUES (@ReturnValue)
END
RETURN
END