Я написал функцию с табличными значениями в 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