Sdílet prostřednictvím


Určení počítaných sloupců v tabulce

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL 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 nebo FOREIGN 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 nebo UNIQUE.

    Pokud má například tabulka celočíselné sloupce a a b, počítaný sloupec definovaný jako a + b se může indexovat, ale vypočítaný sloupec definovaný jako a + 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ýt ON 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

  1. 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.

  2. 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).

  3. Na kartě Vlastnosti sloupce rozbalte položku Specifikace vypočítaného sloupce.

  4. 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ý vzorec SubTotal+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 funkci CAST nebo CONVERT. 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).

  5. Určete, zda jsou data uložena, zvolením Ano nebo Ne z rozevíracího seznamu pro dětskou vlastnost Je uloženo.

  6. V nabídce Soubor vyberte Uložitnázev tabulky.

Přidejte definici počítaného sloupce do existujícího sloupce

  1. 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.
  2. Pravým tlačítkem myši klikněte na sloupec, pro který chcete zadat počítaný vzorec sloupce, a vyberte Odstranit. Vyberte OK.
  3. 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