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