Отказ от ответственности: вы можете использовать функцию fn_split, я просто не использую ее из-за моей версии SQL.
Я не знаю, как разделить на отдельные столбцы или вручную, поэтому вы можете использовать несколько substring
функций для выполнения того, что вы пытаетесь сделать.
@Remarks varchar(100) = 'Product1~2,Product2~1', @Delimiter VARCHAR(1) = ','
DECLARE @Products TABLE(Product VARCHAR(MAX))
;WITH Split_CTE (startPostion, endPosition)
AS (
SELECT CAST(0 AS INT) AS startPostion
,CHARINDEX(@Delimiter, @Remarks) AS endPosition
UNION ALL
SELECT endPosition + 1
,CHARINDEX(@Delimiter, @Remarks, endPosition + 1)
FROM Split_CTE
WHERE endPosition > 0
)
INSERT INTO @Products
SELECT SUBSTRING(@Remarks,startPostion, COALESCE(NULLIF(endPosition,0),LEN(@Remarks) + 1) - startPostion) AS [Data]
FROM Split_CTE
SELECT SUBSTRING([Product], CHARINDEX('~', [Product]) + 1, LEN([Product])) AS Id
,SUBSTRING([Product], 0, CHARINDEX('~', [Product])) AS Product
FROM @Products