Diskuze: case v klauzule where

Ostatní jazyky SQL SQL a databáze case v klauzule where

Avatar
tomas
Člen
Avatar
tomas:

Ahoj ve spolek. Řeším jednu proceduru a nějak si s ní nevím rady. Procedura má jeden vstupní parametr a tím je ID řádku. Já potřebuji v proceduře rozhodnout následovně. Jestliže bude hodnota null pak vybere všechny řádky, ale jestli bude mět nějakou hodnotu, vybere jeden jediný řádek, který se rovná dané hodnotě. Následně uvádím, jak to mám řešené v současnosti.

if @id Is Null
begin
  SELECT [DeviceDiscard].[id]
        ,(select lastname + ' ' + firstname from Employee where id = DeviceDiscard.employee_id) AS approved
        ,[date_discard]
        ,DeviceDiscard.device_id
        ,[DeviceDiscard].[note]
        ,dbo.device.name
        ,dbo.Device.serial_number
        ,dbo.device.inventory_number
  FROM [dbo].[DeviceDiscard] inner join dbo.Device on dbo.device.id = [DeviceDiscard].device_id
  Order By date_discard desc
end
else
  SELECT [DeviceDiscard].[id]
        , (select lastname + ' ' + firstname from Employee where id = DeviceDiscard.employee_id) AS approved
        ,[date_discard]
        ,DeviceDiscard.device_id
        ,[DeviceDiscard].[note]
        ,dbo.device.name
        ,dbo.Device.serial_number
        ,dbo.device.inventory_number
  FROM [dbo].[DeviceDiscard] inner join dbo.Device on dbo.device.id = [DeviceDiscard].device_id
  Where DeviceDiscard.id = @id

END

Pro mě to není dobré řešení, protože jsou tam dva stejné selecty, což mě vadí, je to potencionální místo pro chyby, když ji budu v budoucnu upravovat. Má představa je jeden select a v klauzule where dát podmínku výběru DeviceDiscard.id = @id (v případe že obsahuje hodnotu id) nebo DeviceDiscard.id > -1 (v případě, že je null)

napadá někoho nějaké elegantní řešení?

 
Odpovědět 4.11.2015 15:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.