Delen via


ALTER TABLE computed_column_definition (Transact-SQL)

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

Hiermee geeft u de eigenschappen op van een berekende kolom die wordt toegevoegd aan een tabel met behulp van ALTER TABLE.

Transact-SQL syntaxis-conventies

Syntax

column_name AS computed_column_expression  
[ PERSISTED [ NOT NULL ] ]  
[   
    [ CONSTRAINT constraint_name ]  
    { PRIMARY KEY | UNIQUE }  
        [ CLUSTERED | NONCLUSTERED ]  
        [ WITH FILLFACTOR = fillfactor ]  
        [ WITH ( <index_option> [, ...n ] ) ]  
        [ ON { partition_scheme_name ( partition_column_name ) | filegroup   
            | "default" } ]  
    | [ FOREIGN KEY ]   
        REFERENCES ref_table [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE } ]   
        [ ON UPDATE { NO ACTION } ]   
        [ NOT FOR REPLICATION ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
]  

Arguments

column_name

Is de naam van de kolom die moet worden gewijzigd, toegevoegd of verwijderd. column_name mag uit 1 tot 128 tekens bestaan. Voor nieuwe kolommen kan column_name worden weggelaten voor kolommen die zijn gemaakt met een tijdstempelgegevenstype . Als er geen column_name is opgegeven voor een kolom met het tijdstempelgegevenstype , wordt de tijdstempel van de naam gebruikt.

computed_column_expression

Is een expressie die de waarde van een berekende kolom definieert. Een berekende kolom is een virtuele kolom die niet fysiek is opgeslagen in de tabel, maar wordt berekend vanuit een expressie die gebruikmaakt van andere kolommen in dezelfde tabel. Een expressie moet een waarde opleveren. Een berekende kolom kan bijvoorbeeld de definitie hebben: kosten AS-prijs * kwy. Een ander voorbeeld met bitsgewijze operatoren: is_finalised AS-is_checked | is_approved. De expressie kan een niet-gecomputeerde kolomnaam, constante, functie, variabele en elke combinatie hiervan zijn die is verbonden door een of meer operators. De expressie kan geen zoekvoorwaarde zijn, subquery of een aliasgegevenstype bevatten.

Berekende kolommen kunnen worden gebruikt in selecte lijsten, WHERE-componenten, ORDER BY-componenten of andere locaties waar reguliere expressies kunnen worden gebruikt, maar met de volgende uitzonderingen:

  • Een berekende kolom kan niet worden gebruikt als standaard- of REFERERENDE SLEUTELbeperkingsdefinitie 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 primaire sleutel of unieke beperking.

    Als de tabel bijvoorbeeld gehele kolommen a en b bevat, kan de berekende kolom a + b worden geïndexeerd, maar berekende kolom a + DATEPART(dd, GETDATE()) kan niet worden geïndexeerd, omdat de waarde kan veranderen in volgende aanroepen.

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

    Note

    Omdat elke rij in een tabel verschillende waarden kan hebben voor kolommen die betrokken zijn bij een berekende kolom, heeft de berekende kolom mogelijk niet hetzelfde resultaat voor elke rij.

PERSISTED

Hiermee geeft u op dat de database-engine de berekende waarden fysiek opslaat in de tabel en de waarden bijwerkt wanneer andere kolommen waarvan de berekende kolom afhankelijk is, worden bijgewerkt. Als u een berekende kolom markeert als PERSISTENTED, kan een index worden gemaakt op een berekende kolom die deterministisch is, maar niet nauwkeurig. Zie Indexen voor berekende kolommenvoor meer informatie. Berekende kolommen die worden gebruikt als partitioneringskolommen van een gepartitioneerde tabel, moeten expliciet worden gemarkeerd als PERSISTENTED. computed_column_expression moet deterministisch zijn wanneer PERSISTENTED is opgegeven.

NULL | NIET NULL

Hiermee geeft u op of null-waarden zijn toegestaan in de kolom. NULL is niet strikt een beperking, maar kan worden opgegeven als NOT NULL. NOT NULL kan alleen worden opgegeven voor berekende kolommen als PERSISTENTED ook is opgegeven.

CONSTRAINT

Hiermee geeft u het begin van de definitie voor een PRIMAIRE SLEUTEL of UNIEKE beperking.

constraint_name
Is de nieuwe beperking. Namen van beperkingen moeten voldoen aan de regels voor id's, behalve dat de naam niet kan beginnen met een nummerteken (#). Als constraint_name niet wordt opgegeven, wordt er een door het systeem gegenereerde naam toegewezen aan de beperking.

PRIMARY KEY

Is een beperking waarmee entiteitsintegriteit wordt afgedwongen voor een opgegeven kolom of kolommen met behulp van een unieke index. Er kan slechts één PRIMARY KEY-beperking worden gemaakt voor elke tabel.

UNIQUE

Is een beperking die entiteitsintegriteit biedt voor een specifieke kolom of kolommen met behulp van een unieke index.

GECLUSTERD | NIET-GECLUSTERD

Hiermee geeft u op dat een geclusterde of niet-geclusterde index wordt gemaakt voor de beperking PRIMAIRE SLEUTEL of UNIEK. PRIMAIRE-SLEUTELbeperkingen zijn standaard ingesteld op GECLUSTERD. UNIEKE beperkingen zijn standaard ingesteld op NIET-GECLUSTERD.

Als er al een geclusterde beperking of index bestaat in een tabel, kan CLUSTERED niet worden opgegeven. Als er al een geclusterde beperking of index bestaat in een tabel, worden standaard beperkingen voor PRIMAIRE SLEUTELS ingesteld op NIET-GECLUSTERD.

MET FILLFACTOR =fillfactor

Hiermee geeft u op hoe vol de SQL Server Database Engine elke indexpagina moet maken die wordt gebruikt voor het opslaan van de indexgegevens. Door de gebruiker opgegeven fillfactor waarden kunnen tussen 1 en 100 zijn. Als er geen waarde is opgegeven, is de standaardwaarde 0.

Important

Documenteren MET FILLFACTOR = fillfactor als de enige indexoptie die van toepassing is op PRIMAIRE SLEUTEL of UNIEKE beperkingen wordt gehandhaafd voor achterwaartse compatibiliteit, maar wordt niet op deze manier gedocumenteerd in toekomstige releases. Andere indexopties kunnen worden opgegeven in de component index_option (Transact-SQL) van ALTER TABLE.

VERWIJZINGEN NAAR REFERERENDE SLEUTELS

Is een beperking die referentiële integriteit biedt voor de gegevens in de kolom of kolommen. BEPERKINGEN VOOR REFERERENDE SLEUTELS vereisen dat elke waarde in de kolom bestaat in de bijbehorende kolom of kolommen waarnaar wordt verwezen in de tabel waarnaar wordt verwezen. BEPERKINGEN VAN REFERERENDE SLEUTELS kunnen alleen verwijzen naar kolommen die PRIMAIRE SLEUTEL of UNIEKE beperkingen zijn in de tabel waarnaar wordt verwezen of kolommen waarnaar wordt verwezen in een UNIEKE INDEX in de tabel waarnaar wordt verwezen. Refererende sleutels voor berekende kolommen moeten ook worden gemarkeerd als PERSISTENTED.

ref_table
Is de naam van de tabel waarnaar wordt verwezen door de beperking REFERERENDE SLEUTEL.

(ref_column )
Is een kolom uit de tabel waarnaar wordt verwezen door de beperking REFERERENDE SLEUTEL.

BIJ VERWIJDEREN { GEEN ACTIE | CASCADE }

Hiermee geeft u op welke actie er gebeurt met rijen in de tabel als deze rijen een referentiële relatie hebben en de rij waarnaar wordt verwezen uit de bovenliggende tabel wordt verwijderd. De standaardwaarde is GEEN ACTIE.

NO ACTION
De database-engine genereert een fout en de verwijderactie op de rij in de bovenliggende tabel wordt teruggedraaid.

CASCADE
Overeenkomende rijen worden verwijderd uit de verwijzende tabel als deze rij uit de bovenliggende tabel wordt verwijderd.

In de database heeft de AdventureWorks2022 tabel ProductVendor bijvoorbeeld een referentiële relatie met de tabel Leverancier. De refererende sleutel ProductVendor.BusinessEntityID verwijst naar de primaire sleutel Vendor.BusinessEntityID.

Als een DELETE-instructie wordt uitgevoerd op een rij in de tabel Leverancier en er een ON DELETE CASCADE-actie wordt opgegeven voor ProductVendor.BusinessEntityID, controleert de database-engine op een of meer afhankelijke rijen in de tabel ProductVendor. Indien aanwezig, worden de afhankelijke rijen in de tabel ProductVendor verwijderd, naast de rij waarnaar wordt verwezen in de tabel Leverancier.

Als er echter geen actie is opgegeven, genereert de database-engine een fout en wordt de verwijderactie teruggedraaid op de rij Leverancier wanneer er ten minste één rij in de tabel ProductVendor naar deze rij verwijst.

Geef CASCADE niet op als de tabel wordt opgenomen in een samenvoegpublicatie die logische records gebruikt. Zie Groepswijzigingen in gerelateerde rijen met logische recordsvoor meer informatie over logische records.

BIJWERKEN { GEEN ACTIE }

Hiermee geeft u op welke actie er gebeurt met rijen in de tabel die zijn gemaakt wanneer deze rijen een referentiële relatie hebben en de rij waarnaar wordt verwezen, wordt bijgewerkt in de bovenliggende tabel. Wanneer ER GEEN ACTIE is opgegeven, genereert de database-engine een fout en wordt de updateactie teruggedraaid op de rij Leverancier als er ten minste één rij in de tabel ProductVendor staat die ernaar verwijst.

NIET VOOR REPLICATIE

van toepassing op: SQL Server 2008 (10.0.x) en hoger.

Kan worden opgegeven voor beperkingen van REFERERENDE SLEUTELS en CHECK-beperkingen. Als deze component is opgegeven voor een beperking, wordt de beperking niet afgedwongen wanneer replicatieagenten invoeg-, update- of verwijderbewerkingen uitvoeren.

CHECK

Is een beperking die domeinintegriteit afdwingt door de mogelijke waarden te beperken die kunnen worden ingevoerd in een kolom of kolommen. CHECK-beperkingen voor berekende kolommen moeten ook worden gemarkeerd als PERSISTENTED.

logical_expression
Is een logische expressie die WAAR of ONWAAR retourneert. De expressie mag geen verwijzing naar een aliasgegevenstype bevatten.

ON { partition_scheme_name(partition_column_name) | bestandsgroep| "standaard"}

van toepassing op: SQL Server 2008 (10.0.x) en hoger.

Hiermee geeft u de opslaglocatie van de index die voor de beperking is gemaakt. Als partition_scheme_name is opgegeven, wordt de index gepartitioneerd en worden de partities toegewezen aan de bestandsgroepen die zijn opgegeven door partition_scheme_name. Als de bestandsgroep is opgegeven, wordt de index gemaakt in de benoemde bestandsgroep. Als 'standaard' is opgegeven of als ON helemaal niet is opgegeven, wordt de index gemaakt in dezelfde bestandsgroep als de tabel. Als AAN is opgegeven wanneer een geclusterde index wordt toegevoegd voor een primaire sleutel of unieke beperking, wordt de hele tabel verplaatst naar de opgegeven bestandsgroep wanneer de geclusterde index wordt gemaakt.

Note

In deze context is de standaardwaarde geen trefwoord. Het is een id voor de standaardbestandsgroep en moet worden gescheiden, zoals in ON "default" of ON [standaard]. Als 'standaard' is opgegeven, moet de optie QUOTED_IDENTIFIER ingeschakeld zijn voor de huidige sessie. Dit is de standaardinstelling. Zie set QUOTED_IDENTIFIER (Transact-SQL)voor meer informatie.

Remarks

Elke PRIMAIRE SLEUTEL en DE BEPERKING UNIEK genereren een index. Het aantal beperkingen voor UNIEKE en PRIMAIRE SLEUTELS kan niet leiden tot een groter aantal indexen in de tabel dan 999 niet-geclusterde indexen en 1 geclusterde index.

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

In een Fabric SQL-database kunnen berekende kolommen worden gemaakt, maar worden ze overgeslagen van spiegeling naar Fabric OneLake.