Sie müssen kein dynamisches T-SQL
verwenden Aussage in diesem Fall. Eine Möglichkeit ist, so etwas zu verwenden:
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
Die Idee ist, nach @CategoriesIdString
zu filtern Parameter, wenn er NOT NULL
ist mit LEFT JOIN
.