Her değer için ayrı satırlar tükürmek için bir veritabanında virgülle ayrılmış bir sütun almak için Microsoft SQL Server 2008'de bir Tablo Değerli İşlev yazdı.
Örn: "bir, iki, üç, dört", yalnızca bir sütun aşağıdaki değerleri içeren yeni bir tablo döndürür:
one
two
three
four
Bu kod size eğilimli bir hata mı görünüyor? İle test ettiğimde
SELECT * FROM utvf_Split('one,two,three,four',',')
sadece sonsuza dek çalışır ve hiçbir şey döndürmez. Özellikle MSSQL sunucusunda (NEDEN NEDEN ?!) bölünmüş işlevler bulunmadığından ve web'de bulduğum tüm benzer işlevlerin mutlak çöp olduğu veya yapmaya çalıştığım şeyle alakasız olduğu için bu gerçekten cesaret kırıcı oluyor. .
İşte işlevi:
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