Určení počítaných sloupců v tabulce
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database v Microsoft Fabric
Počítaný sloupec je virtuální sloupec, který není fyzicky uložen v tabulce, pokud není sloupec označen PERSISTED
. Počítaný výraz sloupce může použít data z jiných sloupců k výpočtu hodnoty sloupce, do kterého patří. Výraz pro počítaný sloupec v SQL Serveru můžete zadat pomocí aplikace SQL Server Management Studio (SSMS) nebo Transact-SQL (T-SQL).
Omezení
Počítaný sloupec se nedá použít pro definici omezení
DEFAULT
neboFOREIGN KEY
ani s definicí omezeníNOT NULL
. Pokud je však vypočítaná hodnota sloupce definována deterministickým výrazem a datový typ výsledku je povolen ve sloupcích indexu, počítaný sloupec se dá použít jako klíčový sloupec v indexu nebo jako součást jakéhokoli omezeníPRIMARY KEY
neboUNIQUE
.Pokud má například tabulka celočíselné sloupce
a
ab
, počítaný sloupec definovaný jakoa + b
se může indexovat, ale vypočítaný sloupec definovaný jakoa + DATEPART(dd, GETDATE())
nejde indexovat, protože hodnota se může při následných vyvolání změnit.Počítaný sloupec nemůže být cílem příkazu INSERT nebo UPDATE.
SET QUOTED_IDENTIFIER
musí býtON
při vytváření nebo změně indexů na vypočítaných sloupcích nebo indexovaných zobrazeních. Další informace naleznete v části SET QUOTED_IDENTIFIER (Transact-SQL).
Dovolení
Vyžaduje oprávnění ALTER pro tabulku.
Použití aplikace SQL Server Management Studio
Přidání nového počítaného sloupce
V Průzkumník objektůrozbalte tabulku, pro kterou chcete přidat nový vypočítaný sloupec. Klikněte pravým tlačítkem na Sloupce a vyberte Nový sloupec.
Zadejte název sloupce a přijměte výchozí datový typ (nchar(10)). Databázový stroj určuje datový typ počítaného sloupce použitím pravidel priorit datového typu na výrazy zadané ve vzorci. Pokud například vzorec odkazuje na sloupec typu peníze a sloupec typu int, vypočítaný sloupec bude typu peněz, protože tento datový typ má vyšší prioritu. Další informace naleznete v tématu priorita datových typů (Transact-SQL).
Na kartě Vlastnosti sloupce rozbalte položku Specifikace vypočítaného sloupce.
V podřízené vlastnosti (Vzorec) zadejte výraz pro tento sloupec do buňky mřížky napravo. Například ve sloupci
SalesTotal
může být zadaný vzorecSubTotal+TaxAmt+Freight
, který přidá hodnotu v těchto sloupcích pro každý řádek v tabulce.Důležitý
Když vzorec kombinuje dva výrazy různých datových typů, pravidla pro prioritu datového typu určují, že datový typ s nižší prioritou je převeden na datový typ s vyšší prioritou. Pokud převod není podporovaným implicitním převodem, vrátí se chyba
Error validating the formula for column column_name.
. K vyřešení konfliktu datového typu použijte funkciCAST
neboCONVERT
. Pokud je například sloupec typu nvarchar zkombinován se sloupcem typu int, musí být celočíselná hodnota převedena na nvarchar, jak je znázorněno v tomto vzorci('Prod'+CONVERT(nvarchar(23),ProductID))
. Další informace naleznete v tématu CAST a CONVERT (Transact-SQL).Určete, zda jsou data uložena, zvolením Ano nebo Ne z rozevíracího seznamu pro dětskou vlastnost Je uloženo.
V nabídce Soubor vyberte Uložitnázev tabulky.
Přidejte definici počítaného sloupce do existujícího sloupce
- V Průzkumníku objektůklikněte pravým tlačítkem myši na tabulku, ve které chcete změnit sloupec, a rozbalte složku Sloupce.
- Pravým tlačítkem myši klikněte na sloupec, pro který chcete zadat počítaný vzorec sloupce, a vyberte Odstranit. Vyberte OK.
- Přidejte nový sloupec a podle předchozího postupu zadejte vzorec pro vypočítaný sloupec, abyste přidali nový vypočítaný sloupec.
Použijte Transact-SQL
Přidání počítaného sloupce při vytváření tabulky
Následující příklad vytvoří tabulku s vypočítaným sloupcem, který vynásobí hodnotu ve sloupci QtyAvailable
krát hodnotu ve sloupci UnitPrice
.
CREATE TABLE dbo.Products
(
ProductID int IDENTITY (1,1) NOT NULL
, QtyAvailable smallint
, UnitPrice money
, InventoryValue AS QtyAvailable * UnitPrice
);
-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
VALUES (25, 2.00), (10, 1.5);
-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
-- Update values in the table.
UPDATE dbo.Products
SET UnitPrice = 2.5
WHERE ProductID = 1;
-- Display the rows in the table, and the new values for UnitPrice and InventoryValue.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
Přidání nového počítaného sloupce do existující tabulky
Následující příklad přidá nový sloupec do tabulky vytvořené v předchozím příkladu.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
Volitelně můžete přidat argument PERSISTED, který fyzicky uloží vypočítané hodnoty v tabulce:
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;
Změna existujícího sloupce na počítaný sloupec
Následující příklad upraví sloupec přidaný v předchozím příkladu.
ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO