Saya menulis sebuah Table Valued Function di Microsoft SQL Server 2008 untuk mengambil kolom yang dibatasi koma dalam database untuk mengeluarkan baris terpisah untuk setiap nilai.
Mis: "satu, dua, tiga, empat" akan mengembalikan tabel baru dengan hanya satu kolom yang berisi nilai-nilai berikut:
one
two
three
four
Apakah kode ini terlihat rentan terhadap kalian? Ketika saya mengujinya
SELECT * FROM utvf_Split('one,two,three,four',',')
itu hanya berjalan selamanya dan tidak pernah mengembalikan apa pun. Ini menjadi sangat mengecewakan terutama karena tidak ada fungsi split dibangun di server MSSQL (MENGAPA MENGAPA MENGAPA ?!) dan semua fungsi serupa yang saya temukan di web adalah sampah mutlak atau hanya tidak relevan dengan apa yang saya coba lakukan .
Inilah fungsinya:
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