Ik denk dat je oorspronkelijke poging er bijna is. Ik doe dit soort dingen de hele tijd met dezelfde FOR XML-aanpak. De onderstaande oplossing lost uw exacte voorbeeld op en kan gemakkelijk worden aangepast voor andere doeleinden:
DECLARE @delimiter NVARCHAR(10)
SET @delimiter = ', '
declare @values TABLE (
[value] NVARCHAR(25)
)
declare @otherValues TABLE (
[otherValue] NVARCHAR(25)
)
INSERT INTO @values VALUES ('Value1')
INSERT INTO @values VALUES ('Value2')
INSERT INTO @values VALUES ('Value3')
INSERT INTO @otherValues VALUES ('OtherValue1')
INSERT INTO @otherValues VALUES ('OtherValue2')
INSERT INTO @otherValues VALUES ('OtherValue3')
SELECT
STUFF(
(
SELECT
@delimiter + CAST([value] AS NVARCHAR(500)) + '' AS [text()]
FROM
@values
FOR
XML PATH('')
),
1,
LEN(REVERSE(@delimiter)), -- Reverse the delimiter string in case it has trailing spaces; LEN() won't count those
''
) +
' text in between my values ' +
STUFF(
(
SELECT
@delimiter + CAST([otherValue] AS NVARCHAR(500)) + '' AS [text()]
FROM
@otherValues
FOR
XML PATH('')
),
1,
LEN(REVERSE(@delimiter)), -- Reverse the delimiter string in case it has trailing spaces; LEN() won't count those
''
)