Вы можете использовать эту функцию для анализа данных из строки в тип данных таблицы.Таким образом, вы передаете ему строку и разделитель, в моем примере он разделит состояния на таблицу для выбора.
Select * FROM dbo.fn_splitDelimitedInotTable('MI,AR,TE', ',')
ALTER FUNCTION [dbo].[fn_splitDelimitedInotTable](
@delimited NVARCHAR(MAX),
@delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
INSERT INTO @t(val)
SELECT r.value('.','varchar(MAX)') AS item
FROM @xml.nodes('/t') AS records(r)
RETURN
END
, поэтому, если в вашем параметре есть это строковое значение, вы бы вызвали такую функцию, какэто где id = 1, чтобы получить первый параметр:
Select * FROM dbo.fn_splitDelimitedInotTable('aaa','bbb','eee', ',') where id=1
вернет aaa
, тогда
Select * FROM dbo.fn_splitDelimitedInotTable('aaa','bbb','eee', ',') where id=2
вернет bbb
и
----- ОБНОВЛЕНО, чтобы показать, что я добавил в комментарии
-- recreate the varaible from the SP passed (using double quotes for escape characters to create the data that is passed)
DECLARE @StringVariable2 nvarchar(1000)
SET @StringVariable2 = '(''aaa'',''bbb'',''eee'')'
-- this statement removes the parens
SET @StringVariable2 = REPLACE(REPLACE(@StringVariable2, '(', ''), ')', '')
-- just test selects it with no parems
SELECT @StringVariable2
-- returns the first vaiable from the string so 'aaa'
SELECT * FROM dbo.fn_splitDelimitedInotTable(@StringVariable2, ',') where id=1