Dela via


Ange standardvärden för kolumner

gäller för: SQL Server 2016 (13.x) och senare Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Du kan använda SQL Server Management Studio (SSMS) för att ange ett standardvärde som anges i tabellkolumnen. Du kan ange ett standardvärde med hjälp av Object Explorer eller genom att köra Transact-SQL.

Om du inte tilldelar ett standardvärde till kolumnen och användaren lämnar kolumnen tom lämnar du följande:

  • Om du anger alternativet för att tillåta null-värden infogas NULL i kolumnen.

  • Om du inte anger alternativet för att tillåta null-värden förblir kolumnen tom, men användaren eller programmet kan inte infoga raden förrän de anger ett värde för kolumnen.

Du kan använda en standardbegränsning för olika uppgifter för att säkerställa datakonsekvens på databasnivå:

  • Ange radvärdet för en "aktiv" eller "aktivera"-kolumn till 1 vid infogning.
  • Ange radvärdet för ett datumfält till aktuellt datum.
  • Ange radvärdet för ett fält till en deterministisk systemfunktion, till exempel DB_NAME().

Begränsningar

Innan du börjar bör du vara medveten om följande begränsningar:

  • Om posten i fältet Standardvärde ersätter ett bundet standardvärde (som visas utan parenteser) uppmanas du att ta bort bindningen av standardvärdet och ersätta det med ditt nya standardvärde.

  • Om du vill ange en textsträng omger du värdet inom enkla citattecken ('). Använd inte dubbla citattecken ("), eftersom de är reserverade för citerade identifierare.

  • Ange ett numeriskt standardvärde genom att ange talet utan citattecken runt det.

  • Ange ett objekt/en funktion genom att ange namnet på objektet/funktionen utan citattecken runt det.

  • I Azure Synapse Analytics kan endast konstanter användas för en standardbegränsning. Ett uttryck kan inte användas med en standardbegränsning.

Behörigheter

De åtgärder som beskrivs i den här artikeln kräver ALTER behörighet på tabellen.

Använd SQL Server Management Studio för att ange ett standardvärde

Du kan använda Object Explorer i SSMS för att ange ett standardvärde för en tabellkolumn. Gör det genom att följa dessa steg:

  1. Anslut till SQL Server-instansen i SSMS.

  2. I Object Explorerhögerklickar du på tabellen med kolumner som du vill ändra skalan för och väljer Design.

  3. Välj den kolumn som du vill ange ett standardvärde för.

  4. På fliken Kolumnegenskaper anger du det nya standardvärdet i egenskapen Standardvärde eller Bindning.

    Om du vill ange ett numeriskt standardvärde anger du talet. Ange dess namn för ett objekt eller en funktion. För ett alfanumeriskt standardvärde anger du värdet inom enkla citattecken.

  5. På menyn Arkiv väljer du Spara <tabellnamn>.

Använd Transact-SQL för att ange ett standardvärde

Det finns olika sätt att ange ett standardvärde för en kolumn med hjälp av T-SQL. I vart och ett av följande exempel kan du öppna en ny Transact-SQL fråga med de här stegen.

  1. I Object Exploreransluter du till en instans av databasmotorn.

  2. I standardfältet väljer du Ny fråga.

  3. Kopiera och klistra in exemplet i frågefönstret och välj Kör.

Använda en namngiven begränsning

När du arbetar med databasprojekt rekommenderar vi att du skapar begränsningar med namn. Annars får standardvillkoret ett systemgenererat namn som skiljer sig åt i varje SQL Server-miljö där databasobjekten skapas.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

Använd ALTER TABLE

Du kan lägga till en namngiven begränsning i en befintlig tabell med ALTER TABLE.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT
); -- Allows nulls.
GO

INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO

Använd CREATE TABLE

Du kan skapa en ny tabell med standardbegränsningar med CREATE TABLE.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

Ange ett skapat datum

I följande exempel används sysdatetimeoffset()-systemfunktionen för att fylla i radvärdet för kolumnen dateinserted med datumet då raden skapades.

CREATE TABLE dbo.test (
    id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
    ,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);

En standardbegränsning ändras inte när raden uppdateras. Om du vill uppdatera ett värde när raden ändras bör du överväga att använda en utlösare, en tidstabell, en beräknad kolumneller en radversion binär sträng. Överväg också att infoga rader genom att köra lagrade procedurer i stället för att infoga rader direkt, där lagrade procedurer kan framtvinga affärslogik, standardvärden och andra regler för datakonsekvens.

Om du vill identifiera rader som ändras kan du överväga CDC (Change data capture), Change Tracking, en temporal tabelleller en Ledger-tabell.