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 på 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 på 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å