Ange beräknade kolumner i en tabell
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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
- ellerFOREIGN KEY
-villkorsdefinition eller tillsammans med enNOT 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ågonPRIMARY KEY
ellerUNIQUE
begränsning.Om tabellen till exempel har heltalskolumner
a
ochb
kan en beräknad kolumn som definieras soma + b
indexeras, men den beräknade kolumnen definieras soma + 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 varaON
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
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.
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).
På fliken Kolumnegenskaper expanderar du egenskapen Beräknad kolumnspecifikation.
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 varaSubTotal+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 funktionenCAST
ellerCONVERT
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).Ange om data sparas genom att välja Ja eller Nej från rullgardinsmenyn för den underordnade egenskapen Är beständig.
På menyn Arkiv väljer du Sparatabellnamn.
Lägga till en beräknad kolumndefinition i en befintlig kolumn
- I Object Explorerhögerklickar du på tabellen med kolumnen som du vill ändra och expandera mappen Kolumner.
- 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.
- 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