Use a split string function of your choice something like this.
create function dbo.SplitString
(
@List nvarchar(max),
@Delimiter nvarchar(255)
)
returns table
with schemabinding
as
return
(
select Item = T2.X.value('text()[1]', 'nvarchar(4000)')
from (
select convert(xml, N'<N>' + replace((select @List for xml path('')), @delimiter, N'</N><N>') + N'</N>').query('.')
) as T1(X)
cross apply T1.X.nodes('N') as T2(X)
);
Use that in a stored procedure like this.
create procedure GetPricing
@IDs nvarchar(max),
@Nodes nvarchar(max)
as
select T.ID,
(
select F.X.query('.')
from T.PricingXML.nodes('/Fields/*') as F(X)
inner join dbo.SplitString(@Nodes, ',') as N
on F.X.value('local-name(.)', 'nvarchar(100)') = N.Item
for xml path(''), root('Fields'), type
) as PricingXML
from dbo.T_SMPricingData as T
inner join dbo.SplitString(@IDs, ',') as N
on T.ID = cast(N.Item as int)