Chcete-li vložit data do tabulky se sloupci s výchozími omezeními, můžeme použít omezení DEFAULT na výchozí hodnotu v tabulce. Tento článek se bude zabývat následujícími aspekty:
- Omezení DEFAULT a požadované oprávnění k jejich vytvoření.
- Přidání DEFAULT omezení při vytváření nové tabulky.
- Přidání omezení DEFAULT do existující tabulky.
- Úprava a zobrazení definice omezení pomocí skriptů T-SQL a SSMS.
Co je DEFAULT CONSTRAINT v SQL Server?
Výchozí omezení určuje výchozí hodnotu pro sloupec.
Když provedeme příkaz INSERT, ale nezadáme žádnou hodnotu pro sloupec s vytvořeným výchozím omezením, SQL Server vloží výchozí hodnotu zadanou v definici omezení DEFAULT.
K vytvoření výchozího omezení potřebujete oprávnění ALTER TABLE a CREATE TABLE.
Přidání VÝCHOZÍHO omezení při vytváření nové tabulky
Existuje tabulka s názvem Podrobnosti prodeje . Když do tabulky vložíme data bez určení Množství_prodeje hodnotu sloupce, dotaz musí vložit nulu. Za tímto účelem vytvářím výchozí omezení s názvem DF_SalesDetails_SaleQty na množství_prodeje sloupec.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Nyní otestujme chování omezení tím, že do něj vložíme nějaké fiktivní záznamy. Proveďte následující dotaz:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
K zobrazení dat z tabulky použijte následující dotaz:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Výstup
Jak vidíte, nula byl vložen do Sale_Qty sloupec.
Při vytváření tabulky neuvádíme název omezení DEFAULT. SQL Server vytvoří omezení s jedinečným názvem generovaným systémem.
Vytvořte tabulku pomocí níže uvedeného dotazu:
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Chcete-li zobrazit název omezení, spusťte následující skript:
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Výstup
SQL Server vytvořil omezení s názvem generovaným systémem.
Přidání VÝCHOZÍHO omezení do existující tabulky
Chcete-li přidat omezení na existující sloupec tabulky, použijeme ALTER TABLE ADD CONSTRAINT prohlášení:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
V syntaxi
- tbl_name :zadejte název tabulky, do které chcete přidat výchozí omezení.
- název_omezení :zadejte požadovaný název omezení.
- název_sloupce: zadejte název sloupce, ve kterém chcete vytvořit výchozí omezení.
- výchozí_hodnota: zadejte hodnotu, kterou chcete vložit – celé číslo, znak nebo řetězec znaků.
Pokud v příkazu INSERT neuvedeme hodnotu column_name, vloží hodnotu zadanou v default_value parametr.
Nejprve přidejte Název_produktu do Podrobnosti prodeje :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Data vložíme do tabulky bez uvedení hodnoty sloupce Product_name. Dotaz musí vložit N/A .
Za tímto účelem vytvářím výchozí omezení s názvem DF_SalesDetails_ProductName na Název_produktu sloupec. Následující dotaz vytvoří výchozí omezení:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Nyní se podívejme na chování omezení. Vložte záznam bez uvedení názvu 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 vložení záznamu spusťte dotaz SELECT a zobrazte data:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Výstup
Jak můžete vidět na obrázku výše, hodnota Název_produktu sloupec pro PROD0003 je N/A .
Úprava výchozího omezení pomocí skriptů T-SQL
Můžeme změnit definici výchozího omezení:nejprve zrušte stávající omezení a poté vytvořte omezení s jinou definicí.
Předpokládejme, že místo vložení N/A , chceme vložit Nelze použít . Nejprve musíme vypustit DF_SalesDetails_ProductName omezení. Proveďte následující dotaz:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Když je omezení zrušeno, spusťte dotaz a vytvořte omezení:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Nyní vložíme záznam bez uvedení názvu produktu:
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Spuštěním příkazu SELECT zobrazíte data z SalesDetails tabulka:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Výstup
Jak vidíte, hodnota Název_produktu sloupec nelze použít.
Zobrazení VÝCHOZÍHO omezení pomocí SSMS
Můžeme zobrazit seznam omezení DEFAULT pomocí SQL Server Management Studio a dotazováním na pohledy dynamické správy.
Otevřete SSMS a rozbalte Databáze > Demodatabáze > Podrobnosti o prodeji > Omezení :
Můžete vidět dvě omezení s názvem DF_SalesDetails_SaleQty a DF_SalesDetails_ProductName vytvořeno.
Další způsob zobrazení omezení dotazem sys.default_constraints . Následující dotaz vyplní seznam výchozích omezení a jejich definic:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Výstup
Můžeme použít omezení sp_help uložená procedura pro zobrazení seznamu omezení vytvořených v tabulce:
EXEC Sp_helpconstraint 'SalesDetails'
Výstup
constraint_keys sloupec zobrazuje výchozí definici omezení.
Zrušení omezení
Omezení můžeme zrušit několika způsoby. Můžeme to udělat pomocí některé z následujících metod:
- Příkaz ALTER TABLE DROP CONSTRAINT.
- Příkaz DROP DEFAULT.
Zrušte omezení pomocí příkazu ALTER TABLE DROP CONSTRAINT
Pro zrušení omezení můžeme použít ALTER TABLE DROP CONSTRAINT příkaz. Syntaxe je následující:
Alter table [tbl_name] drop constraint [constraint_name]
V syntaxi
- tbl_name: zadejte název tabulky, která má sloupec s výchozím omezením.
- název_omezení: zadejte název omezení, které chcete zrušit.
Předpokládejme, že chceme vypustit DF_SalesDetails_SaleQty omezení z Podrobnosti prodeje stůl. Spusťte dotaz:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Provedením níže uvedeného dotazu ověřte, že omezení bylo zrušeno:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Výstup
Omezení bylo zrušeno.
Odstranění omezení DEFAULT pomocí příkazu DROP DEFAULT
Nyní pochopíme, jak můžeme odstranit výchozí omezení pomocí DROP DEFAULT prohlášení. Syntaxe DROP DEFAULT prohlášení je následující:
DROP DEFAULT [constraint_name]
- název_omezení: zadejte název omezení, které chcete zrušit.
Chcete-li zrušit omezení pomocí DROP DEFAULT spusťte následující dotaz:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Shrnutí
Prozkoumali jsme tedy několik základních aspektů práce s výchozími omezeními. Naučili jsme se, jak vytvořit výchozí omezení při vytváření nové tabulky nebo přidat výchozí omezení do existujícího sloupce tabulky.
Také jsme prozkoumali případy úpravy výchozí definice omezení, zobrazení podrobností výchozích omezení pomocí různých prostředků a zrušení výchozího omezení.
Doufáme, že tyto informace a praktické příklady, které jsme prozkoumali, vám pomohou ve vaší práci.
Přečtěte si také
SQL INSERT INTO SELECT:5 snadných způsobů, jak zvládnout duplikáty