Du behøver ikke bruge dynamisk T-SQL
udtalelse i denne sag. En af måderne er at bruge sådan noget:
DECLARE @TempXML XML = CONVERT(XML, '<t>' + REPLACE(@CategoriesIdString, ',', '</t><t>') + '</t>')
;WITH DataSource ([CategoryId]) AS
(
SELECT T.c.value('.', 'VARCHAR(100)')
FROM @TempXML.nodes('/t') AS T(c)
WHERE LEN(T.c.value('.', 'VARCHAR(100)')) > 0
)
SELECT Item.Id
,Item.ModelId
,Item.ItemCode
,Item.CategoryId
,(SELECT TOP (1) Category.CategoryName FROM Category WHERE Category.Id = Item.CategoryId) AS CategoryName
FROM Item
LEFT OUTER JOIN Category
ON Item.CategoryId = Category.Id
LEFT JOIN DataSource
ON Item.CategoryId = DataSource.CategoryId
WHERE DataSource.CategoryId IS NOT NULL
OR @CategoriesIdString IS NULL
Ideen er at filtrere efter @CategoriesIdString
parameter, hvis den er NOT NULL
ved hjælp af LEFT JOIN
.