Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL DEFAULT-Einschränkung zum Einfügen einer Spalte mit einem Standardwert in die SQL Server-Tabelle

Um Daten in eine Tabelle mit Spalten mit Standardeinschränkungen einzufügen, können wir die DEFAULT-Einschränkung auf einen Standardwert in einer Tabelle verwenden. Dieser Artikel behandelt die folgenden Aspekte:

  • Die DEFAULT-Einschränkung und die erforderliche Berechtigung, sie zu erstellen.
  • Hinzufügen einer DEFAULT-Einschränkung beim Erstellen einer neuen Tabelle.
  • Hinzufügen einer DEFAULT-Einschränkung zu einer bestehenden Tabelle.
  • Ändern und Anzeigen der Einschränkungsdefinition mit T-SQL-Skripten und SSMS.

Was ist DEFAULT CONSTRAINT in SQL Server?

Eine Standardeinschränkung gibt den Standardwert für die Spalte an.

Wenn wir die INSERT-Anweisung ausführen, aber keinen Wert für die Spalte mit der erstellten Standardeinschränkung angeben, fügt SQL Server den Standardwert ein, der in der DEFAULT-Einschränkungsdefinition angegeben ist.

Um eine Standardeinschränkung zu erstellen, benötigen Sie die ALTER TABLE- und CREATE TABLE-Berechtigung.

Hinzufügen einer STANDARD-Einschränkung beim Erstellen einer neuen Tabelle

Es gibt eine Tabelle namens SalesDetails . Wenn wir Daten in die Tabelle einfügen, ohne Sale_Qty anzugeben Spaltenwert, muss die Abfrage Null einfügen. Dazu erstelle ich eine Standardeinschränkung namens DF_SalesDetails_SaleQty auf Sale_Qty Spalte.

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

Lassen Sie uns nun das Constraint-Verhalten testen, indem wir einige Dummy-Datensätze darin einfügen. Führen Sie die folgende Abfrage aus:

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

Verwenden Sie die folgende Abfrage, um Daten aus der Tabelle anzuzeigen:

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

Ausgabe

Wie Sie sehen können, die Null wurde in Sale_Qty eingefügt Spalte.

Beim Erstellen einer Tabelle geben wir den Namen der DEFAULT-Einschränkung nicht an. SQL Server erstellt eine Einschränkung mit einem vom System generierten eindeutigen Namen.

Erstellen Sie die Tabelle mit der folgenden Abfrage:

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

Führen Sie das folgende Skript aus, um den Beschränkungsnamen anzuzeigen:

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

Ausgabe

SQL Server hat eine Einschränkung mit dem vom System generierten Namen erstellt.

Hinzufügen einer DEFAULT-Einschränkung zu einer bestehenden Tabelle

Um eine Einschränkung für eine vorhandene Spalte der Tabelle hinzuzufügen, verwenden wir die ALTER TABLE ADD CONSTRAINT Aussage:

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

In der Syntax,

  • tbl_name :Geben Sie den Namen der Tabelle an, in der Sie die Standardeinschränkung hinzufügen möchten.
  • constraint_name :Geben Sie den gewünschten Constraint-Namen an.
  • Spaltenname: Geben Sie den Namen der Spalte an, in der Sie die Standardeinschränkung erstellen möchten.
  • Standardwert: Geben Sie den Wert an, den Sie einfügen möchten – eine Ganzzahl, ein Zeichen oder eine Zeichenfolge.

Wenn wir den Wert von column_name nicht in der INSERT-Anweisung angeben, fügt sie den in default_value angegebenen Wert ein Parameter.

Lassen Sie uns zuerst den Product_name hinzufügen Spalte in SalesDetails :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

Wir fügen die Daten in die Tabelle ein, ohne den Wert der Spalte Product_name anzugeben. Die Abfrage muss N/A einfügen .

Dazu erstelle ich eine Standardeinschränkung namens DF_SalesDetails_ProductName auf Product_name Säule. Die folgende Abfrage erstellt eine Standardeinschränkung:

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

Betrachten wir nun das Constraint-Verhalten. Fügen Sie einen Datensatz ein, ohne den Produktnamen anzugeben:

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)

Führen Sie nach dem Einfügen des Datensatzes die SELECT-Abfrage aus, um die Daten anzuzeigen:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Ausgabe

Wie Sie im obigen Bild sehen können, ist der Wert von Product_name Spalte für PROD0003 ist N/A .

Ändern der DEFAULT-Einschränkung mit T-SQL-Skripten

Wir können die Definition der Standardbeschränkung ändern:Löschen Sie zuerst die vorhandene Beschränkung und erstellen Sie dann die Beschränkung mit einer anderen Definition.

Angenommen, anstatt N/A einzufügen möchten wir Nicht zutreffend einfügen . Zuerst müssen wir DF_SalesDetails_ProductName löschen Zwang. Führen Sie die folgende Abfrage aus:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

Wenn die Einschränkung gelöscht wird, führen Sie die Abfrage aus, um die Einschränkung zu erstellen:

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

Lassen Sie uns nun einen Datensatz einfügen, ohne den Produktnamen anzugeben:

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

Führen Sie die SELECT-Anweisung aus, um die Daten aus SalesDetails anzuzeigen Tabelle:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Ausgabe

Wie Sie sehen können, ist der Wert von Product_name Spalte ist nicht zutreffend.

Anzeigen der STANDARD-Einschränkung mit SSMS

Wir können die Liste der DEFAULT-Einschränkung mit SQL Server Management Studio anzeigen und dynamische Verwaltungsansichten abfragen.

Öffnen Sie SSMS und erweitern Sie Datenbanken > DemoDatenbank > Verkaufsdetails > Einschränkung :

Sie können die beiden Einschränkungen namens DF_SalesDetails_SaleQty sehen und DF_SalesDetails_ProductName erstellt.

Eine andere Möglichkeit zum Anzeigen von Einschränkungen durch Abfragen von sys.default_constraints . Die folgende Abfrage füllt die Liste der Standardeinschränkungen und ihrer Definitionen:

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

Ausgabe

Wir können die sp_helpconstraint verwenden gespeicherte Prozedur, um die Liste der Einschränkungen anzuzeigen, die für die Tabelle erstellt wurden:

EXEC Sp_helpconstraint 'SalesDetails'

Ausgabe

Die constraint_keys Spalte zeigt die Standard-Beschränkungsdefinition.

Aufhebung der Einschränkung

Wir können eine Einschränkung auf verschiedene Weise aufheben. Wir können dies mit einer der folgenden Methoden tun:

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

Löschen Sie eine Einschränkung mit dem Befehl ALTER TABLE DROP CONSTRAINT

Um die Einschränkung aufzuheben, können wir die ALTER TABLE DROP CONSTRAINT verwenden Befehl. Die Syntax lautet wie folgt:

Alter table [tbl_name] drop constraint [constraint_name]

In der Syntax,

  • tbl_name: Geben Sie den Tabellennamen an, der eine Spalte mit Standardeinschränkung enthält.
  • constraint_name: Geben Sie den Einschränkungsnamen an, den Sie löschen möchten.

Angenommen, wir möchten DF_SalesDetails_SaleQty löschen Einschränkung aus den SalesDetails Tisch. Führen Sie die Abfrage aus:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Einschränkung gelöscht wurde:

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

Ausgabe

Die Einschränkung wurde aufgehoben.

Entfernen Sie die DEFAULT-Einschränkung mit der DROP DEFAULT-Anweisung

Lassen Sie uns nun verstehen, wie wir die Standardeinschränkung mithilfe von DROP DEFAULT entfernen können Erklärung. Die Syntax von DROP DEFAULT Anweisung lautet wie folgt:

DROP DEFAULT [constraint_name]
  • constraint_name: Geben Sie den Einschränkungsnamen an, den Sie löschen möchten.

Zum Löschen der Einschränkung mit DROP DEFAULT -Anweisung die folgende Abfrage ausführen:

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

Zusammenfassung

Daher haben wir einige wesentliche Aspekte der Arbeit mit den Standardeinschränkungen untersucht. Wir haben gelernt, wie man beim Erstellen einer neuen Tabelle eine Standardeinschränkung erstellt oder einer vorhandenen Tabellenspalte eine Standardeinschränkung hinzufügt.

Außerdem haben wir die Fälle untersucht, in denen die Standardbeschränkungsdefinition geändert, die Details der Standardbeschränkungen mit verschiedenen Mitteln angezeigt und die Standardbeschränkung gelöscht wurden.

Wir hoffen, dass diese Informationen und die von uns untersuchten praktischen Beispiele bei Ihrer Arbeit hilfreich sind.

Lesen Sie auch

SQL INSERT INTO SELECT:5 einfache Wege zum Umgang mit Duplikaten