sql >> Database >  >> RDS >> Sqlserver

SQL DEFAULT-beperking om een ​​kolom met een standaardwaarde in de SQL Server-tabel in te voegen

Om gegevens in te voegen in een tabel met kolommen met standaardbeperkingen, kunnen we de DEFAULT-beperking gebruiken voor een standaardwaarde in een tabel. Dit artikel behandelt de volgende aspecten:

  • De DEFAULT-beperking en vereiste toestemming om ze te maken.
  • Een DEFAULT-beperking toevoegen tijdens het maken van een nieuwe tabel.
  • Een DEFAULT-beperking toevoegen aan een bestaande tabel.
  • De beperkingsdefinitie wijzigen en bekijken met behulp van T-SQL-scripts en SSMS.

Wat is DEFAULT CONSTRAINT in SQL Server?

Een standaardbeperking specificeert de standaardwaarde voor de kolom.

Wanneer we de INSERT-instructie uitvoeren maar geen waarde opgeven voor de kolom met de gemaakte standaardbeperking, voegt SQL Server de standaardwaarde in die is opgegeven in de DEFAULT-beperkingsdefinitie.

Om een ​​standaardbeperking te maken, hebt u de machtigingen ALTER TABLE en CREATE TABLE nodig.

Een DEFAULT-beperking toevoegen tijdens het maken van een nieuwe tabel

Er is een tabel met de naam SalesDetails . Wanneer we gegevens in de tabel invoegen zonder de Sale_Qty . op te geven kolomwaarde, moet de query nul invoegen. Om dat te doen, maak ik een standaardbeperking met de naam DF_SalesDetails_SaleQty op de Sale_Qty kolom.

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

Laten we nu het beperkingsgedrag testen door er enkele dummy-records in te voegen. Voer de volgende vraag uit:

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

Gebruik de volgende query om gegevens uit de tabel te bekijken:

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

Uitvoer

Zoals je kunt zien, is de nul is ingevoegd in de Sale_Qty kolom.

Bij het maken van een tabel specificeren we niet de naam van de DEFAULT-beperking. SQL Server creëert een beperking met een door het systeem gegenereerde unieke naam.

Maak de tabel met behulp van de onderstaande query:

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

Voer het volgende script uit om de naam van de beperking te bekijken:

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

Uitvoer

SQL Server heeft een beperking gemaakt met de door het systeem gegenereerde naam.

Een DEFAULT-beperking toevoegen aan een bestaande tabel

Om een ​​beperking toe te voegen aan een bestaande kolom van de tabel, gebruiken we de ALTER TABLE ADD CONSTRAINT verklaring:

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

In de syntaxis,

  • tbl_name :specificeer de naam van de tabel waaraan u de standaardbeperking wilt toevoegen.
  • constraint_name :specificeer de gewenste beperkingsnaam.
  • column_name: specificeer de naam van de kolom waar u de standaardbeperking wilt maken.
  • default_value: specificeer de waarde die u wilt invoegen – een geheel getal, teken of tekenreeks.

Als we de waarde van de kolomnaam niet specificeren in de INSERT-instructie, wordt de waarde ingevoegd die is opgegeven in de default_value parameter.

Laten we eerst de Product_name . toevoegen kolom in SalesDetails :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

We voegen de gegevens in de tabel in zonder de kolomwaarde Productnaam op te geven. De zoekopdracht moet N.v.t. . invoegen .

Om dat te doen, maak ik een standaardbeperking met de naam DF_SalesDetails_ProductName op de Product_name kolom. De volgende query creëert een standaardbeperking:

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

Laten we nu het dwanggedrag observeren. Voeg een record in zonder de productnaam op te geven:

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)

Nadat het record is ingevoegd, voert u de SELECT-query uit om de gegevens te bekijken:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Uitvoer

Zoals je kunt zien in de bovenstaande afbeelding, is de waarde van de Product_name kolom voor PROD0003 is N.v.t. .

De DEFAULT-beperking wijzigen met behulp van T-SQL-scripts

We kunnen de definitie van de standaardbeperking wijzigen:verwijder eerst de bestaande beperking en maak vervolgens de beperking met een andere definitie.

Stel, in plaats van N.v.t. . in te voegen , we willen Niet van toepassing . invoegen . Eerst moeten we de DF_SalesDetails_ProductName . weglaten beperking. Voer de volgende vraag uit:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

Wanneer de beperking is verwijderd, voert u de query uit om de beperking te maken:

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

Laten we nu een record invoegen zonder de productnaam op te geven:

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

Voer de SELECT-instructie uit om de gegevens van de SalesDetails . te bekijken tafel:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Uitvoer

Zoals u kunt zien, is de waarde van de Product_name kolom is niet van toepassing.

De STANDAARD beperking bekijken met SSMS

We kunnen de lijst met de DEFAULT-beperking bekijken met SQL Server Management Studio en dynamische beheerweergaven opvragen.

Open SSMS en vouw Databases uit > DemoDatabase > Verkoopdetails > Beperking :

U kunt de twee beperkingen zien met de naam DF_SalesDetails_SaleQty en DF_SalesDetails_ProductName gemaakt.

Een andere manier om beperkingen te bekijken door sys.default_constraints op te vragen . De volgende query vult de lijst met standaardbeperkingen en hun definities:

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

Uitvoer

We kunnen de sp_helpconstraint . gebruiken opgeslagen procedure om de lijst met beperkingen die in de tabel zijn gemaakt te bekijken:

EXEC Sp_helpconstraint 'SalesDetails'

Uitvoer

De constraint_keys kolom toont de standaard beperkingsdefinitie.

De beperking laten vallen

We kunnen een beperking op verschillende manieren laten vallen. We kunnen dit doen door een van de volgende methoden te gebruiken:

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

Laat een beperking vallen met het commando ALTER TABLE DROP CONSTRAINT

Om de beperking te laten vallen, kunnen we de ALTER TABLE DROP CONSTRAINT gebruiken opdracht. De syntaxis is als volgt:

Alter table [tbl_name] drop constraint [constraint_name]

In de syntaxis,

  • tbl_name: specificeer de tabelnaam met een kolom met standaardbeperking.
  • constraint_name: specificeer de beperkingsnaam die u wilt verwijderen.

Stel dat we de DF_SalesDetails_SaleQty willen laten vallen beperking van de SalesDetails tafel. Voer de query uit:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Voer de onderstaande query uit om te controleren of de beperking is verwijderd:

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

Uitvoer

De beperking is verwijderd.

Verwijder de DEFAULT-beperking met behulp van de DROP DEFAULT-instructie

Laten we nu eens kijken hoe we de standaardbeperking kunnen verwijderen met behulp van de DROP DEFAULT uitspraak. De syntaxis van de DROP DEFAULT verklaring is als volgt:

DROP DEFAULT [constraint_name]
  • constraint_name: specificeer de beperkingsnaam die u wilt verwijderen.

De beperking verwijderen met de DROP DEFAULT instructie, voer de volgende query uit:

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

Samenvatting

Daarom hebben we verschillende essentiële aspecten van werken met de standaardbeperkingen onderzocht. We hebben geleerd hoe u een standaardbeperking kunt maken tijdens het maken van een nieuwe tabel of een standaardbeperking kunt toevoegen aan een bestaande kolom van de tabel.

We hebben ook de gevallen onderzocht van het wijzigen van de standaardbeperkingsdefinitie, het bekijken van de details van standaardbeperkingen op verschillende manieren en het laten vallen van de standaardbeperking.

We hopen dat deze informatie en de praktische voorbeelden die we hebben onderzocht, nuttig zullen zijn bij uw werk.

Lees ook

SQL INSERT INTO SELECT:5 eenvoudige manieren om met duplicaten om te gaan


  1. Databasetips voor beginners

  2. MariaDB CHARACTER_LENGTH() uitgelegd

  3. PostgreSQL-taakverdeling en proxySQL-verbeteringen - ClusterControl 1.5

  4. Hoe maak je een echte één-op-één relatie in SQL Server