Per inserire dati in una tabella con colonne con vincoli predefiniti, possiamo utilizzare il vincolo DEFAULT su un valore predefinito in una tabella. Questo articolo tratterà i seguenti aspetti:
- Il vincolo DEFAULT e l'autorizzazione richiesta per crearli.
- Aggiunta di un vincolo DEFAULT durante la creazione di una nuova tabella.
- Aggiunta di un vincolo DEFAULT in una tabella esistente.
- Modifica e visualizzazione della definizione del vincolo mediante script T-SQL e SSMS.
Che cos'è il VINCOLO PREDEFINITO in SQL Server?
Un vincolo predefinito specifica il valore predefinito per la colonna.
Quando eseguiamo l'istruzione INSERT ma non specifichiamo alcun valore per la colonna con il vincolo predefinito creato, SQL Server inserisce il valore predefinito specificato nella definizione del vincolo DEFAULT.
Per creare un vincolo predefinito, è necessaria l'autorizzazione ALTER TABLE e CREATE TABLE.
Aggiunta di un vincolo DEFAULT durante la creazione di una nuova tabella
Esiste una tabella denominata SalesDetails . Quando inseriamo i dati nella tabella senza specificare il Sale_Qty valore della colonna, la query deve inserire zero. Per farlo, sto creando un vincolo predefinito denominato DF_SalesDetails_SaleQty nella Qtà_vendita colonna.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Ora, testiamo il comportamento del vincolo inserendo alcuni record fittizi al suo interno. Esegui la seguente query:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Utilizza la query seguente per visualizzare i dati dalla tabella:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Uscita
Come puoi vedere, lo zero è stato inserito nella Sale_Qty colonna.
Durante la creazione di una tabella, non specifichiamo il nome del vincolo DEFAULT. SQL Server crea un vincolo con un nome univoco generato dal sistema.
Crea la tabella utilizzando la query seguente:
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Esegui il seguente script per visualizzare il nome del vincolo:
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Uscita
SQL Server ha creato un vincolo con il nome generato dal sistema.
Aggiunta di un vincolo DEFAULT nella tabella esistente
Per aggiungere un vincolo su una colonna esistente della tabella, utilizziamo ALTER TABLE ADD CONSTRAINT dichiarazione:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
Nella sintassi,
- nome_tbl :specifica il nome della tabella in cui vuoi aggiungere il vincolo di default.
- nome_vincolo :specifica il nome del vincolo desiderato.
- nome_colonna: specifica il nome della colonna in cui vuoi creare il vincolo predefinito.
- valore_predefinito: specifica il valore che vuoi inserire:un numero intero, un carattere o una stringa di caratteri.
Quando non specifichiamo il valore del nome_colonna nell'istruzione INSERT, inserisce il valore specificato nel valore_predefinito parametro.
Innanzitutto, aggiungiamo il Nome_prodotto colonna in Dettagli vendite :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Inseriamo i dati nella tabella senza specificare il valore della colonna Product_name. La query deve inserire N/D .
Per farlo, sto creando un vincolo predefinito denominato DF_SalesDetails_ProductName su Nome_prodotto colonna. La query seguente crea un vincolo predefinito:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Osserviamo ora il comportamento del vincolo. Inserisci un record senza specificare il nome del prodotto:
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)
Una volta inserito il record, eseguire la query SELECT per visualizzare i dati:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Uscita
Come puoi vedere nell'immagine sopra, il valore del Nome_prodotto colonna per PROD0003 è N/D .
Modifica del vincolo DEFAULT utilizzando script T-SQL
Possiamo modificare la definizione del vincolo predefinito:prima, elimina il vincolo esistente e poi crea il vincolo con una definizione diversa.
Supponiamo, invece di inserire N/A , vogliamo inserire Non applicabile . Innanzitutto, dobbiamo eliminare DF_SalesDetails_ProductName vincolo. Esegui la seguente query:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Quando il vincolo viene eliminato, esegui la query per creare il vincolo:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Ora inseriamo un record senza specificare il nome del prodotto:
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Eseguire l'istruzione SELECT per visualizzare i dati da SalesDetails tabella:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Uscita
Come puoi vedere, il valore del Nome_prodotto colonna non è applicabile.
Visualizzazione del vincolo PREDEFINITO tramite SSMS
Possiamo visualizzare l'elenco del vincolo DEFAULT utilizzando SQL Server Management Studio e interrogando le viste a gestione dinamica.
Apri SSMS ed espandi Database > DemoDatabase > Dettagli sulle vendite > Vincolo :
Puoi vedere i due vincoli denominati DF_SalesDetails_SaleQty e DF_SalesDetails_ProductName creato.
Un altro modo per visualizzare i vincoli eseguendo una query su sys.default_constraints . La query seguente popola l'elenco dei vincoli predefiniti e le relative definizioni:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Uscita
Possiamo usare il sp_helpconstraint stored procedure per visualizzare l'elenco dei vincoli creati sulla tabella:
EXEC Sp_helpconstraint 'SalesDetails'
Uscita
I tasti_vincolo la colonna mostra la definizione di vincolo di default.
Rimozione del vincolo
Possiamo eliminare un vincolo in diversi modi. Possiamo farlo utilizzando uno dei seguenti metodi:
- Istruzione ALTER TABLE DROP CONSTRAINT.
- Dichiarazione DROP DEFAULT.
Elimina un vincolo usando il comando ALTER TABLE DROP CONSTRAINT
Per eliminare il vincolo, possiamo utilizzare ALTER TABLE DROP CONSTRAINT comando. La sintassi è la seguente:
Alter table [tbl_name] drop constraint [constraint_name]
Nella sintassi,
- nome_tbl: specifica il nome della tabella che ha una colonna con vincolo predefinito.
- nome_vincolo: specifica il nome del vincolo che desideri eliminare.
Supponiamo di voler eliminare il DF_SalesDetails_SaleQty vincolo dai SalesDetails tavolo. Esegui la query:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Esegui la query seguente per verificare che il vincolo sia stato eliminato:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Uscita
Il vincolo è stato eliminato.
Rimuovere il vincolo DEFAULT utilizzando l'istruzione DROP DEFAULT
Ora, cerchiamo di capire come rimuovere il vincolo predefinito utilizzando il DROP DEFAULT dichiarazione. La sintassi di DROP DEFAULT dichiarazione è la seguente:
DROP DEFAULT [constraint_name]
- nome_vincolo: specifica il nome del vincolo che desideri eliminare.
Per eliminare il vincolo utilizzando DROP DEFAULT istruzione, eseguire la seguente query:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Riepilogo
Pertanto, abbiamo esaminato diversi aspetti essenziali del lavoro con i vincoli predefiniti. Abbiamo imparato come creare un vincolo predefinito durante la creazione di una nuova tabella o aggiungere un vincolo predefinito su una colonna esistente della tabella.
Inoltre, abbiamo esaminato i casi di modifica della definizione di vincolo di default, di visualizzazione dei dettagli di vincoli di default con mezzi diversi e di eliminazione del vincolo di default.
Ci auguriamo che queste informazioni e gli esempi pratici che abbiamo esaminato possano essere utili nel tuo lavoro.
Leggi anche
SQL INSERT INTO SELECT:5 semplici modi per gestire i duplicati