Ho scritto una funzione con valori di tabella in Microsoft SQL Server 2008 per prendere una colonna delimitata da virgole in un database per sputare righe separate per ciascun valore.
Esempio: "uno, due, tre, quattro" restituirà una nuova tabella con una sola colonna contenente i seguenti valori:
one
two
three
four
Ragazzi, questo codice sembra soggetto a errori? Quando lo collaudo con
SELECT * FROM utvf_Split('one,two,three,four',',')
funziona solo per sempre e non restituisce mai nulla. Questo sta diventando davvero scoraggiante soprattutto perché non ci sono funzioni split integrate sul server MSSQL (PERCHÉ PERCHÉ PERCHÉ ?!) e tutte le funzioni simili che ho trovato sul web sono spazzatura assoluta o semplicemente irrilevante per quello che sto cercando di fare .
Ecco la funzione:
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