V SQL Server, vypočítaný sloupec je virtuální sloupec, který používá výraz k výpočtu své hodnoty.
Vypočítaný sloupec obvykle používá při výpočtu data z jiných sloupců. Pokud jsou data v některém z těchto sloupců aktualizována, vypočítaný sloupec automaticky zohlední aktualizaci ve svém výpočtu.
Příklad počítaného sloupce
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
V tomto příkladu FullName
sloupec je vypočítaný sloupec. Zřetězí hodnoty z FirstName
a LastName
sloupců pro výpočet celého jména.
Pokud byste bez vypočítaného sloupce chtěli vybrat celé jméno, museli byste udělat něco takového:
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
Nebo můžete použít CONCAT()
funkce, jako je tato:
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
Pokaždé, když chcete z tabulky vybrat celé jméno, bylo nutné do dotazu zahrnout zřetězení.
Ale pomocí vypočítaného sloupce, jako je ten výše, můžete udělat toto:
SELECT FullName FROM Person;
Výhody počítaných sloupců
Vypočítané sloupce mohou ušetřit čas při psaní dotazů, snížit chyby a dokonce zlepšit výkon.
Vypočítané sloupce mohou být užitečné, pokud zjistíte, že opakovaně spouštíte stejný dotaz znovu a znovu, zejména pokud je tento dotaz založen na obchodních pravidlech, která se jen zřídka mění.
Vypočítaný sloupec v předchozím příkladu by nám mohl v budoucnu ušetřit spoustu času, protože nebudeme muset spojovat křestní jméno a příjmení pokaždé, když chceme vybrat něčí celé jméno.
Příklady případů použití
Příklady, kde by vypočítaný sloupec mohl být užitečný, zahrnují:
- Výpočet věku osoby na základě data narození v jiném sloupci
- Zřetězení křestního jména a příjmení na základě křestního jména v jednom sloupci a příjmení v druhém
- Výpočet hodnoty zásob produktu na základě počtu produktů na skladě v jednom sloupci a ceny v jiném sloupci
- Vypočítejte BMI (Body Mass Index) osoby na základě její výšky a hmotnosti v jiném sloupci
- Vytvoření sloupce Hodnocení, který seřadí řádky na základě hodnot v jiných sloupcích
- Výpočet závodních časů maratonských běžců na základě jejich času zahájení a času ukončení v jiných sloupcích
Trvalost vypočítaných sloupců
Vypočítaný sloupec není v tabulce fyzicky uložen, pokud není označen PERSISTED
.
Pokud není trvalý vypočítaný sloupec, výpočet proběhne při každém přístupu k tabulce.
Pokud je trvalý vypočítaný sloupec, je vypočtená hodnota fyzicky uložena v tabulce. To znamená, že nemusí počítat svou hodnotu pokaždé, když spustíte dotaz. Pokud jsou data aktualizována v jednom ze sloupců, pro který odvozují svou hodnotu, aktualizuje se hodnota vypočítaného sloupce a uloží se do tabulky. To může pomoci s výkonem.
Uvědomte si, že vypočítaný sloupec může být zachován, pouze pokud je deterministický. Pokud není deterministický, zobrazí se chyba, pokud se jej pokusíte přetrvat.
nedeterministický sloupec je ten, který vrací různé hodnoty i se stejným vstupem. Pokud například ve výpočtu použijete aktuální datum, hodnota se bude každý den lišit a bude považována za nedeterministickou.
Pokud jednoduše spojujete křestní jméno a příjmení, pak by to bylo deterministické a takový sloupec byste mohli zachovat.
Vytvoření vypočítaného sloupce
Vypočítané sloupce můžete vytvářet z GUI SSMS nebo pomocí Transact-SQL.
V SSMS
V SSMS, zatímco v Návrháři tabulek , vytvořte sloupec, který má být vypočteným sloupcem (nebo jej jednoduše vyberte, pokud již existuje), a poté v části Vlastnosti sloupce zadejte vzorec do Specifikace vypočítaného sloupce pole majetku.
Nebojte se dát vypočítanému sloupci datový typ – SQL Server mu dá datový typ na základě vašeho vzorce.
Můžete také vybrat Ano pro Je trvalé Pokud si budete přát.
Použití T-SQL
Příklad vytvoření vypočítaného sloupce pomocí Transact-SQL naleznete v části Vytvoření vypočítaného sloupce na serveru SQL Server pomocí T-SQL.