Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ограничение по подразбиране на SQL за вмъкване на колона със стойност по подразбиране в таблицата на SQL Server

За да вмъкнем данни в таблица с колони с ограничения по подразбиране, можем да използваме ограничението DEFAULT към стойност по подразбиране в таблица. Тази статия ще обхване следните аспекти:

  • Ограничението DEFAULT и необходимото разрешение за създаването им.
  • Добавяне на ограничение DEFAULT при създаване на нова таблица.
  • Добавяне на ограничение DEFAULT в съществуваща таблица.
  • Промяна и преглед на дефиницията на ограничението с помощта на T-SQL скриптове и SSMS.

Какво е ОГРАНИЧЕНИЕ ПО ПОДРАЗБИРАНЕ в SQL Server?

Ограничение по подразбиране определя стойността по подразбиране за колоната.

Когато изпълняваме оператора INSERT, но не указваме стойност за колоната със създаденото ограничение по подразбиране, SQL Server вмъква стойността по подразбиране, посочена в дефиницията на ограничението DEFAULT.

За да създадете ограничение по подразбиране, имате нужда от разрешението ALTER TABLE и CREATE TABLE.

Добавяне на ограничение ПО ПОДРАЗБИРАНЕ при създаване на нова таблица

Има таблица с име Подробности за продажбите . Когато вмъкваме данни в таблицата, без да указваме Количество_продажба стойност на колоната, заявката трябва да вмъкне нула. За да направя това, създавам ограничение по подразбиране с име DF_SalesDetails_SaleQty на разпродажба колона.

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

Сега нека тестваме поведението на ограничението, като вмъкнем някои фиктивни записи в него. Изпълнете следната заявка:

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

Използвайте следната заявка, за да видите данни от таблицата:

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

Изход

Както виждате, нулата е вмъкнат в Количество_продажба колона.

Докато създаваме таблица, ние не указваме името на ограничението DEFAULT. SQL Server създава ограничение с генерирано от системата уникално име.

Създайте таблицата, като използвате следната заявка:

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

Изпълнете следния скрипт, за да видите името на ограничението:

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

Изход

SQL Server е създал ограничение с генерираното от системата име.

Добавяне на ограничение по подразбиране в съществуваща таблица

За да добавим ограничение към съществуваща колона на таблицата, използваме ALTER TABLE ADD CONSTRAINT изявление:

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

В синтаксиса,

  • tbl_name :посочете името на таблицата, където искате да добавите ограничението по подразбиране.
  • име_на_ограничение :посочете желаното име на ограничение.
  • име_на_колона: посочете името на колоната, където искате да създадете ограничението по подразбиране.
  • стойност по подразбиране: посочете стойността, която искате да вмъкнете – цяло число, знак или низ от знаци.

Когато не посочим стойността на column_name в израза INSERT, той вмъква стойността, посочена в default_value параметър.

Първо, нека добавим име_на_продукт колона в Подробности за продажбите :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

Вмъкваме данните в таблицата, без да указваме стойността на колоната Product_name. Заявката трябва да вмъкне N/A .

За да направя това, създавам ограничение по подразбиране с име DF_SalesDetails_ProductName на име_на_продукт колона. Следната заявка създава ограничение по подразбиране:

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

Сега нека наблюдаваме поведението на ограниченията. Вмъкнете запис, без да посочвате името на продукта:

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)

След като записът бъде вмъкнат, изпълнете заявката SELECT, за да видите данните:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Изход

Както можете да видите на изображението по-горе, стойността на Product_name колона за PROD0003 е Н/П .

Промяна на ограничението DEFAULT с помощта на T-SQL скриптове

Можем да променим дефиницията на ограничението по подразбиране:първо махнете съществуващото ограничение и след това създайте ограничението с различна дефиниция.

Да предположим, че вместо да вмъкнете N/A , искаме да вмъкнем Неприложимо . Първо, трябва да премахнем DF_SalesDetails_ProductName ограничение. Изпълнете следната заявка:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

Когато ограничението бъде премахнато, изпълнете заявката, за да създадете ограничението:

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

Сега нека вмъкнем запис, без да указваме името на продукта:

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

Изпълнете оператора SELECT, за да видите данните от Подробности за продажбите таблица:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Изход

Както можете да видите, стойността на Product_name колоната не е приложима.

Преглед на ограничението ПО ПОДРАЗБИРАНЕ с помощта на SSMS

Можем да прегледаме списъка с ограничението ПО ПОДРАЗБИРАНЕ, като използваме SQL Server Management Studio и заявяваме динамични изгледи за управление.

Отворете SSMS и разгънете Бази данни > База от демонстрационни данни > Подробности за продажбите > Ограничение :

Можете да видите двете ограничения с име DF_SalesDetails_SaleQty и DF_SalesDetails_ProductName създадено.

Друг начин за преглед на ограничения чрез заявка за sys.default_constraints . Следната заявка попълва списъка с ограничения по подразбиране и техните дефиниции:

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

Изход

Можем да използваме sp_helpconstraint съхранена процедура, за да видите списъка с ограничения, създадени в таблицата:

EXEC Sp_helpconstraint 'SalesDetails'

Изход

ограничаващите_ключове колоната показва дефиницията на ограничението по подразбиране.

Отпадане на ограничението

Можем да премахнем ограничение по няколко начина. Можем да го направим, като използваме някой от следните методи:

  • Изявление ALTER TABLE DROP CONSTRAINT.
  • Изявление DROP DEFAULT.

Отпуснете ограничение с помощта на команда ALTER TABLE DROP CONSTRAINT

За да премахнем ограничението, можем да използваме ОГРАНИЧЕНИЕТО ЗА ОТПУСКАНЕ НА ALTER TABLE команда. Синтаксисът е следният:

Alter table [tbl_name] drop constraint [constraint_name]

В синтаксиса,

  • tbl_name: посочете името на таблицата, която има колона с ограничение по подразбиране.
  • име_на_ограничение: посочете името на ограничението, което искате да премахнете.

Да предположим, че искаме да премахнем DF_SalesDetails_SaleQty ограничение от Подробности за продажбите маса. Изпълнете заявката:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Изпълнете заявката по-долу, за да проверите дали ограничението е премахнато:

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

Изход

Ограничението е премахнато.

Отстранете ограничението DEFAULT с помощта на оператора DROP DEFAULT

Сега нека разберем как можем да премахнем ограничението по подразбиране с помощта на DROP DEFAULT изявление. Синтаксисът на DROP DEFAULT изявлението е както следва:

DROP DEFAULT [constraint_name]
  • име_на_ограничение: посочете името на ограничението, което искате да премахнете.

За да премахнете ограничението, използвайте DROP DEFAULT изявление, изпълнете следната заявка:

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

Резюме

По този начин ние разгледахме няколко основни аспекта на работата с ограниченията по подразбиране. Научихме как да създадем ограничение по подразбиране, докато създаваме нова таблица или да добавяме ограничение по подразбиране към съществуваща колона на таблицата.

Също така, ние проучихме случаите на промяна на дефиницията на ограничението по подразбиране, преглед на подробностите за ограниченията по подразбиране с помощта на различни средства и отпадане на ограничението по подразбиране.

Надяваме се, че тази информация и практическите примери, които разгледахме, ще бъдат полезни в работата ви.

Прочетете също

SQL INSERT INTO SELECT:5 лесни начина за справяне с дубликати


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:каскаден еквивалент на пускане на таблица?

  2. Изпълнете съхранена процедура от функция

  3. Най-добрият инструмент за възстановяване на SQL за 2020 г. за възстановяване на важна SQL база данни

  4. T-SQL:Изтриване на всички дублиращи се редове, но запазване на един

  5. PIVOT в sql 2005