sql >> Database teknologi >  >> RDS >> Sqlserver

SQL DEFAULT Begrænsning for at indsætte kolonne med en standardværdi til SQL Server-tabel

For at indsætte data i en tabel med kolonner med standardbegrænsninger, kan vi bruge DEFAULT-begrænsningen til en standardværdi i en tabel. Denne artikel vil dække følgende aspekter:

  • DEFAULT-begrænsningen og krævede tilladelse til at oprette dem.
  • Tilføjelse af en DEFAULT-begrænsning, mens du opretter en ny tabel.
  • Tilføjelse af en DEFAULT-begrænsning i en eksisterende tabel.
  • Ændring og visning af begrænsningsdefinitionen ved hjælp af T-SQL-scripts og SSMS.

Hvad er DEFAULT CONSTRAINT i SQL Server?

En standardbegrænsning angiver standardværdien for kolonnen.

Når vi udfører INSERT-sætningen, men ikke angiver nogen værdi for kolonnen med standardbegrænsningen oprettet, indsætter SQL Server standardværdien angivet i DEFAULT-begrænsningsdefinitionen.

For at oprette en standardbegrænsning skal du have tilladelserne ALTER TABLE og CREATE TABLE.

Tilføjelse af en STANDARD-begrænsning under oprettelse af en ny tabel

Der er en tabel med navnet Salgsdetaljer . Når vi indsætter data i tabellen uden at angive Sale_Qty kolonneværdi, skal forespørgslen indsætte nul. For at gøre det opretter jeg en standardbegrænsning ved navn DF_SalesDetails_SaleQty Sale_Qty kolonne.

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

Lad os nu teste begrænsningsadfærden ved at indsætte nogle dummy-poster i den. Udfør følgende forespørgsel:

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

Brug følgende forespørgsel til at se data fra tabellen:

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

Output

Som du kan se, er nul er blevet indsat i Sale_Qty kolonne.

Mens vi opretter en tabel, angiver vi ikke navnet på DEFAULT-begrænsningen. SQL Server opretter en begrænsning med et systemgenereret unikt navn.

Opret tabellen ved at bruge nedenstående forespørgsel:

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

Kør følgende script for at se begrænsningsnavnet:

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

Output

SQL Server har oprettet en begrænsning med det systemgenererede navn.

Tilføjelse af en STANDARD-begrænsning i eksisterende tabel

For at tilføje en begrænsning på en eksisterende kolonne i tabellen bruger vi ALTER TABLE ADD CONSTRAINT erklæring:

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

I syntaksen,

  • tbl_name :Angiv navnet på den tabel, hvor du vil tilføje standardbegrænsningen.
  • constraint_name :angiv det ønskede begrænsningsnavn.
  • kolonnenavn: angiv navnet på den kolonne, hvor du vil oprette standardbegrænsningen.
  • default_value: angiv den værdi, du vil indsætte – et heltal, et tegn eller en tegnstreng.

Når vi ikke angiver værdien af ​​kolonnenavnet i INSERT-sætningen, indsætter den værdien angivet i default_value parameter.

Lad os først tilføje Product_name kolonne i Salgsdetaljer :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

Vi indsætter dataene i tabellen uden at angive kolonneværdien Produktnavn. Forespørgslen skal indsætte Ikke relevant .

For at gøre det opretter jeg en standardbegrænsning ved navn DF_SalesDetails_ProductName Product_name kolonne. Følgende forespørgsel opretter en standardbegrænsning:

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

Lad os nu observere begrænsningsadfærden. Indsæt en post uden at angive produktnavnet:

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 er indsat, skal du køre SELECT-forespørgslen for at se dataene:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Output

Som du kan se på billedet ovenfor, er værdien af ​​Product_name kolonne for PROD0003 er Ikke relevant .

Ændring af DEFAULT-begrænsningen ved hjælp af T-SQL-scripts

Vi kan ændre definitionen af ​​standardbegrænsningen:Slip først den eksisterende begrænsning og opret derefter begrænsningen med en anden definition.

Antag, i stedet for at indsætte N/A , vil vi indsætte Ikke relevant . Først skal vi droppe DF_SalesDetails_ProductName begrænsning. Udfør følgende forespørgsel:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

Når begrænsningen er droppet, skal du køre forespørgslen for at oprette begrænsningen:

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

Lad os nu indsætte en post uden at angive produktnavnet:

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

Kør SELECT-sætningen for at se dataene fra SalgDetails tabel:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Output

Som du kan se, er værdien af ​​Product_name kolonne er ikke relevant.

Visning af STANDARD-begrænsningen ved hjælp af SSMS

Vi kan se listen over DEFAULT-begrænsningen ved hjælp af SQL Server Management Studio og forespørgsler om dynamiske administrationsvisninger.

Åbn SSMS og udvid Databaser > DemoDatabase > Salgsoplysninger > Begrænsning :

Du kan se de to begrænsninger kaldet DF_SalesDetails_SaleQty og DF_SalesDetails_ProductName oprettet.

En anden måde at se begrænsninger på ved at forespørge sys.default_constraints . Følgende forespørgsel udfylder listen over standardbegrænsninger og deres definitioner:

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

Output

Vi kan bruge sp_helpconstraint gemt procedure for at se listen over begrænsninger oprettet på tabellen:

EXEC Sp_helpconstraint 'SalesDetails'

Output

constraint_keys kolonne viser standard begrænsningsdefinitionen.

Sletning af begrænsningen

Vi kan slippe en begrænsning på flere måder. Vi kan gøre det ved at bruge en af ​​følgende metoder:

  • ÆNDRING AF TABLE DROP CONSTRAINT-sætning.
  • DROP DEFAULT-sætning.

Slip en begrænsning ved hjælp af ALTER TABLE DROP CONSTRAINT-kommandoen

For at fjerne begrænsningen kan vi bruge ALTER TABLE DROP CONSTRAINT kommando. Syntaksen er følgende:

Alter table [tbl_name] drop constraint [constraint_name]

I syntaksen,

  • tbl_name: angiv det tabelnavn, der har en kolonne med standardbegrænsning.
  • constraint_name: angiv det begrænsningsnavn, du vil slette.

Antag, at vi vil droppe DF_SalesDetails_SaleQty begrænsning fra SalgDetails bord. Kør forespørgslen:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Udfør nedenstående forespørgsel for at bekræfte, at begrænsningen er blevet fjernet:

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

Output

Begrænsningen er blevet fjernet.

Fjern DEFAULT-begrænsningen ved hjælp af DROP DEFAULT-erklæringen

Lad os nu forstå, hvordan vi kan fjerne standardbegrænsningen ved hjælp af DROP DEFAULT udmelding. Syntaksen for DROP DEFAULT erklæringen er som følger:

DROP DEFAULT [constraint_name]
  • constraint_name: angiv det begrænsningsnavn, du vil slette.

For at slippe begrænsningen ved hjælp af DROP DEFAULT sætning, skal du køre følgende forespørgsel:

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

Oversigt

Vi har således undersøgt flere væsentlige aspekter af arbejdet med standardbegrænsningerne. Vi har lært, hvordan du opretter en standardbegrænsning, mens du opretter en ny tabel eller tilføjer en standardbegrænsning på en eksisterende kolonne i tabellen.

Vi har også undersøgt tilfældene med ændring af standardbegrænsningsdefinitionen, visning af detaljerne om standardbegrænsninger ved hjælp af forskellige midler og ophævelse af standardbegrænsningen.

Vi håber, at disse oplysninger og de praktiske eksempler, vi har undersøgt, vil være nyttige i dit arbejde.

Læs også

SQL INSERT INTO SELECT:5 nemme måder at håndtere dubletter på


  1. Returner rækker, der indeholder alfanumeriske tegn i SQLite

  2. En introduktion til fuldtekstsøgning i MariaDB

  3. TIME_FORMAT() Eksempler – MySQL

  4. Generer tilfældige heltal uden kollisioner