आपको डायनेमिक T-SQL
का उपयोग करने की आवश्यकता नहीं है इस मामले में बयान। कुछ इस तरह का उपयोग करने का एक तरीका है:
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
विचार @CategoriesIdString
. द्वारा फ़िल्टर करना है पैरामीटर अगर यह NOT NULL
है LEFT JOIN
का उपयोग कर रहे हैं ।