NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: case v klauzule where

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
tomas
Člen
Avatar
tomas:4.11.2015 15:04

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.