sql >> Databasteknik >  >> RDS >> Sqlserver

SQL DEFAULT Begränsning för att infoga kolumn med ett standardvärde till SQL Server-tabell

För att infoga data i en tabell med kolumner med standardbegränsningar kan vi använda DEFAULT-begränsningen till ett standardvärde i en tabell. Den här artikeln kommer att täcka följande aspekter:

  • DEFAULT-begränsningen och krävde behörighet för att skapa dem.
  • Lägger till en DEFAULT-begränsning när du skapar en ny tabell.
  • Lägga till en DEFAULT-begränsning i en befintlig tabell.
  • Ändra och visa begränsningsdefinitionen med T-SQL-skript och SSMS.

Vad är DEFAULT CONSTRAINT i SQL Server?

En standardbegränsning anger standardvärdet för kolumnen.

När vi kör INSERT-satsen men inte anger något värde för kolumnen med standardbegränsningen skapad, infogar SQL Server standardvärdet som anges i DEFAULT-begränsningsdefinitionen.

För att skapa en standardbegränsning behöver du behörigheterna ALTER TABLE och CREATE TABLE.

Lägga till en DEFAULT-begränsning när du skapar en ny tabell

Det finns en tabell som heter Försäljningsdetaljer . När vi infogar data i tabellen utan att ange Sale_Quty kolumnvärdet måste frågan infoga noll. För att göra det skapar jag en standardbegränsning som heter DF_SalesDetails_SaleQty Sale_Quty kolumn.

USE demodatabase 
go 
CREATE TABLE salesdetails 
  ( 
     id           INT IDENTITY (1, 1), 
     product_code VARCHAR(10), 
     sale_qty     INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0 
  ) 

Låt oss nu testa begränsningsbeteendet genom att infoga några dummy-poster i det. Kör följande fråga:

INSERT INTO salesdetails 
            (product_code) 
VALUES     ('PROD0001')

Använd följande fråga för att visa data från tabellen:

INSERT INTO salesdetails 
            (product_code) 
VALUES     ('PROD0001')

Utdata

Som du kan se är nolla har infogats i Sale_Quty kolumn.

När vi skapar en tabell anger vi inte namnet på DEFAULT-begränsningen. SQL Server skapar en begränsning med ett systemgenererat unikt namn.

Skapa tabellen med hjälp av nedanstående fråga:

USE demodatabase 
go 
CREATE TABLE salesdetails 
  ( 
     id           INT IDENTITY (1, 1), 
     product_code VARCHAR(10), 
     sale_qty     INT DEFAULT 0 
  )

Kör följande skript för att visa begränsningsnamnet:

SELECT NAME             [Constraint name], 
       parent_object_id [Table Name], 
       type_desc        [Object Type], 
       definition       [Constraint Definition] 
FROM   sys.default_constraints 

Utdata

SQL Server har skapat en begränsning med det systemgenererade namnet.

Lägga till en DEFAULT-begränsning i befintlig tabell

För att lägga till en begränsning på en befintlig kolumn i tabellen använder vi ALTER TABLE ADD CONSTRAINT uttalande:

ALTER TABLE [tbl_name] 
  ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]

I syntaxen,

  • tbl_name :ange namnet på tabellen där du vill lägga till standardbegränsningen.
  • constraint_name :ange önskat begränsningsnamn.
  • kolumnnamn: ange namnet på kolumnen där du vill skapa standardbegränsningen.
  • default_value: ange värdet som du vill infoga – ett heltal, tecken eller teckensträng.

När vi inte anger värdet för kolumnnamnet i INSERT-satsen, infogar det värdet som anges i default_value parameter.

Låt oss först lägga till Produktnamn kolumnen i Försäljningsinformation :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

Vi infogar data i tabellen utan att ange kolumnvärdet Product_name. Frågan måste infoga N/A .

För att göra det skapar jag en standardbegränsning som heter DF_SalesDetails_ProductName Produktnamn kolumn. Följande fråga skapar en standardbegränsning:

ALTER TABLE dbo.salesdetails 
  ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name 

Låt oss nu observera begränsningsbeteendet. Infoga en post utan att ange produktnamnet:

INSERT INTO salesdetails 
            (product_code, 
             product_name, 
             sale_qty) 
VALUES     ('PROD0002', 
            'Dell Optiplex 7080', 
            20) 

INSERT INTO salesdetails 
            (product_code, 
             sale_qty) 
VALUES     ('PROD0003', 
            50)

När posten har infogats kör du SELECT-frågan för att se data:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Utdata

Som du kan se i bilden ovan är värdet för Produktnamn kolumn för PROD0003 är N/A .

Ändra DEFAULT-begränsningen med T-SQL-skript

Vi kan ändra definitionen av standardbegränsningen:släpp först den befintliga begränsningen och skapa sedan begränsningen med en annan definition.

Antag, istället för att infoga N/A , vill vi infoga Ej tillämpligt . Först måste vi släppa DF_SalesDetails_ProductName begränsning. Kör följande fråga:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

När begränsningen släpps kör du frågan för att skapa begränsningen:

ALTER TABLE dbo.salesdetails 
  ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR 
  product_name 

Låt oss nu infoga en post utan att ange produktnamnet:

INSERT INTO salesdetails 
            (product_code, 
             sale_qty) 
VALUES     ('PROD0004', 
            10)

Kör SELECT-satsen för att se data från Säljdetaljer tabell:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Utdata

Som du kan se är värdet på Produktnamn kolumnen är inte tillämplig.

Visa DEFAULT-begränsningen med SSMS

Vi kan se listan över DEFAULT-begränsningen med hjälp av SQL Server Management Studio och fråga efter dynamiska hanteringsvyer.

Öppna SSMS och expandera Databaser > DemoDatabase > Försäljningsinformation > Begränsning :

Du kan se de två begränsningarna som heter DF_SalesDetails_SaleQty och DF_SalesDetails_ProductName skapat.

Ett annat sätt att visa begränsningar genom att fråga sys.default_constraints . Följande fråga fyller i listan över standardbegränsningar och deras definitioner:

SELECT NAME                  [Constraint name], 
       Object_name(parent_object_id)[Table Name], 
       type_desc             [Consrtaint Type], 
       definition            [Constraint Definition] 
FROM   sys.default_constraints

Utdata

Vi kan använda sp_helpconstraint lagrad procedur för att se listan över begränsningar som skapats i tabellen:

EXEC Sp_helpconstraint 'SalesDetails'

Utdata

constraint_keys kolumnen visar standardbegränsningsdefinitionen.

Släpp begränsningen

Vi kan släppa en begränsning på flera sätt. Vi kan göra det genom att använda någon av följande metoder:

  • ALTER TABLE DROP CONSTRAINT-sats.
  • DROP DEFAULT-sats.

Släpp en begränsning med kommandot ALTER TABLE DROP CONSTRAINT

För att ta bort begränsningen kan vi använda ALTER TABLE DROP CONSTRAINT kommando. Syntaxen är följande:

Alter table [tbl_name] drop constraint [constraint_name]

I syntaxen,

  • tbl_name: ange tabellnamnet som har en kolumn med standardbegränsning.
  • constraint_name: ange begränsningsnamnet som du vill ta bort.

Anta att vi vill ta bort DF_SalesDetails_SaleQty begränsning från Försäljningsinformation tabell. Kör frågan:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Kör frågan nedan för att verifiera att begränsningen har tagits bort:

SELECT NAME                  [Constraint name], 
       Object_name(parent_object_id)[Table Name], 
       type_desc             [Consrtaint Type], 
       definition            [Constraint Definition] 
FROM   sys.default_constraints

Utdata

Begränsningen har tagits bort.

Ta bort DEFAULT-begränsningen med DROP DEFAULT-satsen

Låt oss nu förstå hur vi kan ta bort standardbegränsningen med DROP DEFAULT påstående. Syntaxen för DROP DEFAULT uttalandet är som följer:

DROP DEFAULT [constraint_name]
  • constraint_name: ange begränsningsnamnet som du vill ta bort.

För att ta bort begränsningen med DROP DEFAULT uttalande, kör följande fråga:

IF EXISTS (SELECT NAME 
           FROM   sys.objects 
           WHERE  NAME = 'DF_SalesDetails_ProductName' 
                  AND type = 'D') 
DROP DEFAULT [DF_SalesDetails_ProductName]; 

Sammanfattning

Därför har vi undersökt flera väsentliga aspekter av arbete med standardbegränsningarna. Vi har lärt oss hur du skapar en standardbegränsning samtidigt som du skapar en ny tabell eller lägger till en standardbegränsning på en befintlig kolumn i tabellen.

Vi har också undersökt fallen av att modifiera standardbegränsningsdefinitionen, visa detaljerna om standardbegränsningar på olika sätt och ta bort standardbegränsningen.

Vi hoppas att denna information och de praktiska exemplen vi har undersökt kommer att vara till hjälp i ditt arbete.

Läs också

SQL INSERT INTO SELECT:5 enkla sätt att hantera dubbletter


  1. Rails 4 session.id ibland noll

  2. PHP och Postgres:fångar fel?

  3. postgresql date_trunc till godtycklig precision?

  4. Förstå Group by Clause i SQL Server - SQL Server / TSQL Tutorial Del 130