sql >> Databáze >  >> RDS >> Sqlserver

SQL DEFAULT Omezení pro vložení sloupce s výchozí hodnotou do tabulky SQL Server

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


  1. Jak mohu zkombinovat více řádků do seznamu odděleného čárkami v SQL Server 2005?

  2. skript pro převod mysql dump sql souboru do formátu, který lze importovat do sqlite3 db

  3. SQL OR operátor pro začátečníky

  4. Jak zobrazit plán provádění dotazů v Azure Data Studio (SQL Server)