Dela via


Ange beräknade kolumner i en tabell

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

En beräknad kolumn är en virtuell kolumn som inte lagras fysiskt i tabellen, såvida inte kolumnen är markerad PERSISTED. Ett beräknat kolumnuttryck kan använda data från andra kolumner för att beräkna ett värde för kolumnen som det tillhör. Du kan ange ett uttryck för en beräknad kolumn i SQL Server med hjälp av SQL Server Management Studio (SSMS) eller Transact-SQL (T-SQL).

Begränsningar

  • En beräknad kolumn kan inte användas som en DEFAULT- eller FOREIGN KEY-villkorsdefinition eller tillsammans med en NOT NULL-villkorsdefinition. Men om det beräknade kolumnvärdet definieras av ett deterministiskt uttryck och datatypen för resultatet tillåts i indexkolumner, kan en beräknad kolumn användas som en nyckelkolumn i ett index eller som en del av någon PRIMARY KEY eller UNIQUE begränsning.

    Om tabellen till exempel har heltalskolumner a och bkan en beräknad kolumn som definieras som a + b indexeras, men den beräknade kolumnen definieras som a + DATEPART(dd, GETDATE()) inte kan indexeras, eftersom värdet kan ändras i efterföljande anrop.

  • En beräknad kolumn kan inte vara målet för en INSERT- eller UPDATE-instruktion.

  • SET QUOTED_IDENTIFIER måste vara ON när du skapar eller ändrar index för beräknade kolumner eller indexerade vyer. Mer information finns i SET QUOTED_IDENTIFIER (Transact-SQL).

Behörigheter

Kräver ALTER-behörighet på tabellen.

Använda SQL Server Management Studio

Lägga till en ny beräknad kolumn

  1. I Object Explorerexpanderar du tabellen som du vill lägga till den nya beräknade kolumnen för. Högerklicka på kolumner och välj Ny kolumn.

  2. Ange kolumnnamnet och godkänn standarddatatypen (nchar(10)). Databasmotorn avgör datatypen för den beräknade kolumnen genom att tillämpa reglerna för datatypprioritet på de uttryck som anges i formeln. Om formeln till exempel refererar till en kolumn av typen pengar och en kolumn av typen int, kommer den beräknade kolumnen att vara av typen pengar eftersom den datatypen har högre prioritet. Mer information finns i Data Type Precedence (Transact-SQL).

  3. På fliken Kolumnegenskaper expanderar du egenskapen Beräknad kolumnspecifikation.

  4. I (Formel) barnattribut anger du uttrycket för den här kolumnen i gridcellen till höger. I en SalesTotal kolumn kan till exempel formeln du anger vara SubTotal+TaxAmt+Freight, vilket lägger till värdet i dessa kolumner för varje rad i tabellen.

    Viktig

    När en formel kombinerar två uttryck av olika datatyper anger reglerna för datatypprioritet att datatypen med den lägre prioriteten konverteras till datatypen med högre prioritet. Om konverteringen inte är en implicit konvertering som stöds returneras felet Error validating the formula for column column_name.. Använd funktionen CAST eller CONVERT för att lösa datatypkonflikten. Om till exempel en kolumn av typen nvarchar kombineras med en kolumn av typen intmåste heltalstypen konverteras till nvarchar som visas i den här formeln ('Prod'+CONVERT(nvarchar(23),ProductID)). Mer information finns i CAST och CONVERT (Transact-SQL).

  5. Ange om data sparas genom att välja Ja eller Nej från rullgardinsmenyn för den underordnade egenskapen Är beständig.

  6. På menyn Arkiv väljer du Sparatabellnamn.

Lägga till en beräknad kolumndefinition i en befintlig kolumn

  1. I Object Explorerhögerklickar du på tabellen med kolumnen som du vill ändra och expandera mappen Kolumner.
  2. Högerklicka på den kolumn som du vill ange en formel för beräknad kolumn för och välj Ta bort. Välj OK.
  3. Lägg till en ny kolumn och ange formeln för beräknad kolumn genom att följa föregående procedur för att lägga till en ny beräknad kolumn.

Använd Transact-SQL

Lägga till en beräknad kolumn när du skapar en tabell

I följande exempel skapas en tabell med en beräknad kolumn som multiplicerar värdet i den QtyAvailable kolumnen gånger värdet i kolumnen 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;

Lägga till en ny beräknad kolumn i en befintlig tabell

I följande exempel läggs en ny kolumn till i tabellen som skapades i föregående exempel.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

Du kan också lägga till argumentet PERSISTED för att fysiskt lagra de beräknade värdena i tabellen:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;

Ändra en befintlig kolumn till en beräknad kolumn

I följande exempel ändras kolumnen som lades till i föregående exempel.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO