Beim Schreiben von Stores Procedure möchte man von Zeit zu Zeit div. Elemente dynamisch auswählen lassen. Ein gutes Beispiel dafür ist z.B. der Order By - Part einer Abfrage.
Um per Parameter dieses zu steuern hier ein Stückchen Code:
declare @order int
set @order = 3
SELECT *
FROM GaliNeo_Store_Product P LEFT JOIN GaliNeo_Store_CatProduct CP ON CP.[ProductId] = P.[ProductId]
WHERE CP.[CategoryID] = 19
order by
case @order
when 'productname' then [ProductName]
when 'productnumber' then P.[ProductNumber]
else null
end,
case @order
when 'productid' then P.[ProductId]
else null
end
Diesen Code habe ich im SQl Query Analyzer geschrieben und ausgeführt.
Das hier zwei case - Bereiche genutzt werden liegt an den unterschiedlichen Datentypen. ProductName ist ein nvarchar und ProductId ein int Datentyp. Entweder führt man eine Konvertierung durch, besser ist aber wenn man mit zwei Konstrukten arbeitet.
Eine andere Möglichkeit wäre folgende:
declare @order int
set @order = 3
SELECT *,
case
when @order = 1 then [ProductName]
when @order = 2 then Convert(nvarchar,P.[Productid])
when @order = 3 then Convert(nvarchar,P.[ProductTypeId])
end as OrderCol
FROM GaliNeo_Store_Product P LEFT JOIN GaliNeo_Store_CatProduct CP ON CP.[ProductId] = P.[ProductId]
WHERE CP.[CategoryID] = 19
order by OrderCol