Aby wstawić dane do tabeli zawierającej kolumny z domyślnymi ograniczeniami, możemy użyć ograniczenia DEFAULT do domyślnej wartości w tabeli. W tym artykule omówimy następujące aspekty:
- Ograniczenie DOMYŚLNE i wymagane uprawnienia do ich utworzenia.
- Dodawanie ograniczenia DEFAULT podczas tworzenia nowej tabeli.
- Dodawanie ograniczenia DEFAULT do istniejącej tabeli.
- Modyfikowanie i przeglądanie definicji ograniczenia za pomocą skryptów T-SQL i SSMS.
Co to jest DEFAULT CONSTRAINT w SQL Server?
Domyślne ograniczenie określa domyślną wartość kolumny.
Kiedy wykonujemy instrukcję INSERT, ale nie określamy żadnej wartości dla kolumny z utworzonym domyślnym ograniczeniem, SQL Server wstawia domyślną wartość określoną w definicji ograniczenia DEFAULT.
Aby utworzyć domyślne ograniczenie, potrzebujesz uprawnienia ALTER TABLE i CREATE TABLE.
Dodawanie wiązania DOMYŚLNEGO podczas tworzenia nowej tabeli
Istnieje tabela o nazwie Szczegóły sprzedaży . Gdy wstawiamy dane do tabeli bez określenia Ilość_sprzedaży wartość kolumny, zapytanie musi wstawić zero. W tym celu tworzę domyślne ograniczenie o nazwie DF_SalesDetails_SaleQty na Ilość_wyprzedaży kolumna.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Teraz przetestujmy zachowanie ograniczenia, wstawiając do niego kilka fikcyjnych rekordów. Wykonaj następujące zapytanie:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Użyj następującego zapytania, aby wyświetlić dane z tabeli:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Wyjście
Jak widać, zero został wstawiony do Sale_Qty kolumna.
Tworząc tabelę nie podajemy nazwy ograniczenia DEFAULT. SQL Server tworzy ograniczenie z unikatową nazwą wygenerowaną przez system.
Utwórz tabelę, używając poniższego zapytania:
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Uruchom następujący skrypt, aby wyświetlić nazwę ograniczenia:
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Wyjście
SQL Server utworzył ograniczenie z nazwą wygenerowaną przez system.
Dodawanie ograniczenia DOMYŚLNEGO do istniejącej tabeli
Aby dodać ograniczenie do istniejącej kolumny tabeli, używamy ZMIEŃ OGRANICZENIE DODANIA TABELI oświadczenie:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
W składni
- nazwa_tabeli :określ nazwę tabeli, w której chcesz dodać domyślne ograniczenie.
- nazwa_ograniczenia :określ żądaną nazwę ograniczenia.
- nazwa_kolumny: określ nazwę kolumny, w której chcesz utworzyć domyślne ograniczenie.
- wartość_domyślna: określ wartość, którą chcesz wstawić – liczbę całkowitą, znak lub ciąg znaków.
Gdy nie określimy wartości nazwa_kolumny w instrukcji INSERT, wstawi ona wartość określoną w wartość_domyślna parametr.
Najpierw dodajmy nazwa_produktu kolumnę w Szczegóły sprzedaży :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Wstawiamy dane do tabeli bez określania wartości kolumny Product_name. Zapytanie musi zawierać nie dotyczy .
W tym celu tworzę domyślne ograniczenie o nazwie DF_SalesDetails_ProductName w nazwa_produktu kolumna. Następujące zapytanie tworzy domyślne ograniczenie:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Przyjrzyjmy się teraz zachowaniu ograniczającemu. Wstaw rekord bez określania nazwy produktu:
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)
Po wstawieniu rekordu uruchom zapytanie SELECT, aby wyświetlić dane:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Wyjście
Jak widać na powyższym obrazku, wartość Product_name kolumna dla PROD0003 jest nie dotyczy .
Modyfikowanie ograniczenia DOMYŚLNEGO za pomocą skryptów T-SQL
Możemy zmienić definicję domyślnego ograniczenia:najpierw usuń istniejące ograniczenie, a następnie utwórz ograniczenie z inną definicją.
Załóżmy, zamiast wstawiać Nie dotyczy , chcemy wstawić Nie dotyczy . Najpierw musimy usunąć DF_SalesDetails_ProductName ograniczenie. Wykonaj następujące zapytanie:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Gdy ograniczenie zostanie usunięte, uruchom zapytanie, aby utworzyć ograniczenie:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Teraz wstawmy rekord bez określania nazwy produktu:
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Uruchom instrukcję SELECT, aby wyświetlić dane z Szczegóły sprzedaży tabela:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Wyjście
Jak widać, wartość Product_name kolumna nie dotyczy.
Wyświetlanie wiązania DOMYŚLNEGO za pomocą programu SSMS
Możemy wyświetlić listę ograniczeń DEFAULT za pomocą SQL Server Management Studio i odpytując dynamiczne widoki zarządzania.
Otwórz SSMS i rozwiń Bazy danych > Baza danych Demo > Szczegóły sprzedaży > Ograniczenie :
Możesz zobaczyć dwa ograniczenia o nazwie DF_SalesDetails_SaleQty i DF_SalesDetails_ProductName utworzony.
Inny sposób przeglądania ograniczeń przez zapytanie sys.default_constraints . Następujące zapytanie wypełnia listę domyślnych ograniczeń i ich definicji:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Wyjście
Możemy użyć sp_helpconstraint procedura składowana, aby wyświetlić listę ograniczeń utworzonych w tabeli:
EXEC Sp_helpconstraint 'SalesDetails'
Wyjście
klucze_ograniczeń kolumna pokazuje domyślną definicję ograniczenia.
Zrzucanie ograniczenia
Ograniczenie możemy usunąć na kilka sposobów. Możemy to zrobić za pomocą dowolnej z następujących metod:
- Oświadczenie ALTER TABLE DROP CONSTRAINT.
- Oświadczenie DROP DEFAULT.
Upuść wiązanie za pomocą polecenia ALTER TABLE DROP CONSTRAINT
Aby usunąć ograniczenie, możemy użyć ZMIANY OGRANICZENIA UPUSZCZANIA TABELI Komenda. Składnia jest następująca:
Alter table [tbl_name] drop constraint [constraint_name]
W składni
- nazwa_tabeli: określ nazwę tabeli, która ma kolumnę z domyślnym ograniczeniem.
- nazwa_ograniczenia: określ nazwę ograniczenia, które chcesz usunąć.
Załóżmy, że chcemy usunąć DF_SalesDetails_SaleQty ograniczenie z Szczegóły sprzedaży stół. Uruchom zapytanie:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Wykonaj poniższe zapytanie, aby sprawdzić, czy ograniczenie zostało usunięte:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Wyjście
Ograniczenie zostało usunięte.
Usuń ograniczenie DEFAULT za pomocą instrukcji DROP DEFAULT
Teraz zrozumiemy, jak możemy usunąć domyślne ograniczenie za pomocą DROP DEFAULT oświadczenie. Składnia DROP DEFAULT oświadczenie brzmi następująco:
DROP DEFAULT [constraint_name]
- nazwa_ograniczenia: określ nazwę ograniczenia, które chcesz usunąć.
Aby usunąć ograniczenie za pomocą DROP DEFAULT oświadczenie, uruchom następujące zapytanie:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Podsumowanie
W ten sposób przeanalizowaliśmy kilka istotnych aspektów pracy z domyślnymi ograniczeniami. Nauczyliśmy się tworzyć domyślne ograniczenie podczas tworzenia nowej tabeli lub dodać domyślne ograniczenie do istniejącej kolumny tabeli.
Zbadaliśmy również przypadki modyfikowania domyślnej definicji ograniczenia, przeglądania szczegółów domyślnych ograniczeń przy użyciu różnych środków i usuwania domyślnego ograniczenia.
Mamy nadzieję, że te informacje i praktyczne przykłady, które przeanalizowaliśmy, będą pomocne w Twojej pracy.
Czytaj także
SQL INSERT INTO SELECT:5 łatwych sposobów obsługi duplikatów