05.03.2022, Vladimír Klaus, navštíveno 647x

SQL
SQL Server

Pokud potřebujete v tabulce na SQL Serveru založit kalkulované pole, pak vřele doporučuji na to jít přes T-SQL, nikoliv přes Designera. Pořád vám bude hlásit nějaké chyby a nedá se s ním rozumně pracovat - hlavně ve chvíli, kdy se vám nedaří zadat správnou podmínku.

Já jsem potřeboval mít pole, které uvádí, že je jistá akce zpožděná, tedy rozdíl datumů je záporný. První zrada, na kterou narazíte se skrývá v tom, že nelze použít jednoduchou podmínku typu Rozdil<0, protože to vede na True/False výsledek a to SQL Server "neumí". Tím mám na mysli to, že bool hodnoty jsou ukládané jako 1 a 0, tedy jako číslo.

Použijete tedy funkci CASE, abyste převedli logickou operaci na číselný výsledek 0/1. Jenomže ono to pak může zlobit dál, neboť je to vážně číslo, nikoliv bool hodnota. A až z níže uvedeného odkazu jsem našel vlastně už jednoduché doladění spočívající v přetypování čísla na bit. A takové kalkulované pole se už dobře propíše třeba i do Delphi, kdy je dané pole opravdu korektně rozpoznáno jako boolean.

ALTER TABLE NakupovaneDily ADD JePozdniTerminDodani AS (
  CASE WHEN DATEDIFF(day, TerminDodani, PozadovaneDatumDodani) < 0
    THEN CAST(1 AS BIT)
    ELSE CAST(0 AS BIT)
  END
)

Zdroj: