За да вмъкнем данни в таблица с колони с ограничения по подразбиране, можем да използваме ограничението 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 лесни начина за справяне с дубликати