Я написав функцію "Таблицька оцінка" в Microsoft SQL Server 2008, щоб взяти стовпчик з обмеженими комами в базі даних, щоб виплюнути окремі рядки для кожного значення.
Наприклад: "один, два, три, чотири" поверне нову таблицю з лише одним стовпцем, що містить такі значення:
one
two
three
four
Чи виглядає цей код схильним до вас, хлопці? Коли я тестую це
SELECT * FROM utvf_Split('one,two,three,four',',')
він просто працює вічно і ніколи нічого не повертає. Це стає дуже огидно, тим більше, що на сервері MSSQL немає вбудованих розділених функцій (ЧОМУ ЧОМУ чому ?!), а всі подібні функції, які я знайшов в Інтернеті, є абсолютним сміттям або просто не мають значення для того, що я намагаюся робити. .
Ось функція:
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