Delen via


Berekende kolommen in een tabel opgeven

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Een berekende kolom is een virtuele kolom die niet fysiek is opgeslagen in de tabel, tenzij de kolom is gemarkeerd als PERSISTED. Een berekende kolomexpressie kan gegevens uit andere kolommen gebruiken om een waarde te berekenen voor de kolom waartoe deze behoort. U kunt een expressie opgeven voor een berekende kolom in SQL Server met behulp van SQL Server Management Studio (SSMS) of Transact-SQL (T-SQL).

Beperkingen

  • Een berekende kolom kan niet worden gebruikt als een definitie van een DEFAULT of FOREIGN KEY beperking of met een NOT NULL beperkingsdefinitie. Als de berekende kolomwaarde echter wordt gedefinieerd door een deterministische expressie en het gegevenstype van het resultaat is toegestaan in indexkolommen, kan een berekende kolom worden gebruikt als een sleutelkolom in een index of als onderdeel van een PRIMARY KEY of UNIQUE beperking.

    Als de tabel bijvoorbeeld kolommen met gehele getallen a en bbevat, kan een berekende kolom die is gedefinieerd als a + b worden geïndexeerd, maar berekende kolom die is gedefinieerd als a + DATEPART(dd, GETDATE()) niet kan worden geïndexeerd, omdat de waarde in volgende aanroepen kan veranderen.

  • Een berekende kolom kan niet het doel zijn van een INSERT- of UPDATE-instructie.

  • SET QUOTED_IDENTIFIER moet worden ON wanneer u indexen maakt of wijzigt in berekende kolommen of geïndexeerde weergaven. Zie set QUOTED_IDENTIFIER (Transact-SQL)voor meer informatie.

Machtigingen

Vereist ALTER-toestemming voor de tabel.

SQL Server Management Studio gebruiken

Een nieuwe berekende kolom toevoegen

  1. Vouw in Objectverkennerde tabel uit waarvoor u de nieuwe berekende kolom wilt toevoegen. Klik met de rechtermuisknop op kolommen en selecteer nieuwe kolom.

  2. Voer de kolomnaam in en accepteer het standaardgegevenstype (nchar(10)). De database-engine bepaalt het gegevenstype van de berekende kolom door de regels van het gegevenstype prioriteit toe te passen op de expressies die in de formule zijn opgegeven. Als de formule bijvoorbeeld verwijst naar een kolom van het type geld en een kolom van het type int, is de berekende kolom van het type geld omdat dat gegevenstype de hogere prioriteit heeft. Zie prioriteit voor gegevenstypen (Transact-SQL) voor meer informatie.

  3. Vouw op het tabblad Kolomeigenschappen de eigenschap Berekende kolomspecificatie uit.

  4. Voer in de (Formule) subeigenschap de expressie voor deze kolom in de rastercel aan de rechterkant in. In een SalesTotal kolom kan de formule die u invoert bijvoorbeeld SubTotal+TaxAmt+Freightzijn, waarmee de waarde in deze kolommen voor elke rij in de tabel wordt toegevoegd.

    Belangrijk

    Wanneer een formule twee expressies van verschillende gegevenstypen combineert, geven de regels voor prioriteit van gegevenstypen aan dat het gegevenstype met de lagere prioriteit wordt geconverteerd naar het gegevenstype met de hogere prioriteit. Als de conversie geen ondersteunde impliciete conversie is, wordt de fout Error validating the formula for column column_name. geretourneerd. Gebruik de functie CAST of CONVERT om het gegevenstypeconflict op te lossen. Als bijvoorbeeld een kolom van het type nvarchar wordt gecombineerd met een kolom van het type int, moet het gehele getal worden geconverteerd naar nvarchar- zoals wordt weergegeven in deze formule ('Prod'+CONVERT(nvarchar(23),ProductID)). Zie CAST en CONVERT (Transact-SQL)voor meer informatie.

  5. Geef aan of de gegevens behouden blijven door Ja of Nee te kiezen in de vervolgkeuzelijst voor de Is Opgeslagen onderliggende eigenschap.

  6. Selecteer in het menu BestandTabelnaam opslaan.

Een berekende kolomdefinitie toevoegen aan een bestaande kolom

  1. Klik in Objectverkennermet de rechtermuisknop op de tabel met de kolom waarvoor u de map Kolommen wilt wijzigen en uitvouwen.
  2. Klik met de rechtermuisknop op de kolom waarvoor u een berekende kolomformule wilt opgeven en selecteer Verwijderen. Selecteer OK-.
  3. Voeg een nieuwe kolom toe en geef de berekende kolomformule op door de vorige procedure te volgen om een nieuwe berekende kolom toe te voegen.

Gebruik Transact-SQL

Een berekende kolom toevoegen bij het maken van een tabel

In het volgende voorbeeld wordt een tabel gemaakt met een berekende kolom waarmee de waarde in de QtyAvailable kolom wordt vermenigvuldigd met de waarde in de UnitPrice kolom.

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;

Een nieuwe berekende kolom toevoegen aan een bestaande tabel

In het volgende voorbeeld wordt een nieuwe kolom toegevoegd aan de tabel die in het vorige voorbeeld is gemaakt.

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

Voeg eventueel het argument PERSISTENTED toe om de berekende waarden fysiek op te slaan in de tabel:

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

Een bestaande kolom wijzigen in een berekende kolom

In het volgende voorbeeld wordt de kolom gewijzigd die in het vorige voorbeeld is toegevoegd.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

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