Указание значений по умолчанию для столбцов
С помощью СРЕДЫ SQL Server Management Studio можно указать значение по умолчанию, которое будет введено в столбец таблицы. По умолчанию можно задать с помощью обозревателя объектов SSMS или выполнения Transact-SQL.
Если значение по умолчанию не задано столбцу и пользователь оставляет столбец пустым, происходит следующее:
- если активирована поддержка значений NULL, в столбец вставляется значение NULL ;
- если поддержка значений NULL не активирована, столбец остается пустым, но пользователь не сможет сохранить строку, пока не предоставит какое-либо значение.
Ограничения
Перед началом работы необходимо учесть следующие ограничения:
- Если данные, введенные в поле Значение по умолчанию , заменяют связанное со столбцом значение по умолчанию (которое отображается без скобок), то будет предложено отменить привязку значения по умолчанию и заменить его новым значением.
- При вводе текстовых строк заключайте их в одинарные кавычки (‘); не используйте двойные кавычки («), потому что они зарезервированы для идентификаторов.
- Чтобы задать численное значение по умолчанию, введите число без одинарных кавычек.
- Чтобы задать объект или функцию, введите имя объекта или функции без двойных кавычек.
В Azure Synapse Analytics для ограничения по умолчанию можно использовать только константы. Выражение нельзя использовать с ограничением по умолчанию.
Разрешения
Для выполнения действий, описанных в этой статье, требуется разрешение ALTER для таблицы.
Использование SSMS для указания значения по умолчанию
Обозреватель объектов в SSMS можно использовать для указания значения по умолчанию для столбца таблицы. Для этого выполните следующие шаги:
- Подключитесь к экземпляру SQL Server в SSMS.
- В обозревателе объектов щелкните правой кнопкой мыши таблицу со столбцами, масштаб которых необходимо изменить, и выберите Конструктор.
- Выберите столбец, для которого нужно задать значение по умолчанию.
- На вкладке Свойства столбца введите новое значение по умолчанию в свойстве Значение по умолчанию или привязка .
Заметка Чтобы задать численное значение по умолчанию, введите число. В случае объекта или функции нужно ввести его или ее имя. Чтобы задать алфавитно-цифровое значение по умолчанию, введите его, заключив в одинарные кавычки.
Использование Transact-SQL для указания значения по умолчанию
Существуют различные способы указания значения по умолчанию для столбца с помощью отправки T-SQL.
ALTER TABLE (T-SQL)
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
CREATE TABLE dbo.doc_exz (column_a INT, column_b INT); -- Allows nulls. GO INSERT INTO dbo.doc_exz (column_a) VALUES (7); GO ALTER TABLE dbo.doc_exz ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b; GO
CREATE TABLE (T-SQL)
CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT DEFAULT 50);
CONSTRAINT (T-SQL) с именем
CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50);
Далее
Дополнительные сведения см. в разделе ALTER TABLE (Transact-SQL).
SQL-Ex blog
Вставка столбца со значением по умолчанию в таблицу SQL Server
Добавил Sergey Moiseenko on Суббота, 2 октября. 2021
- Ограничение DEFAULT и необходимые разрешения для его создания.
- Добавление ограничения DEFAULT при создании новой таблицы.
- Добавление ограничения DEFAULT в существующую таблицу.
- Модификация и просмотр определения ограничения с помощью скриптов T-SQL и в SSMS.
Что такое ограничение DEFAULT
Ограничение DEFAULT задает значение по умолчанию для столбца.
Когда выполняется оператор INSERT, но не указывается конкретное значение для столбца с созданным ограничением DEFAULT, SQL Server вставляет значение по умолчанию, указанное в определении ограничения DEFAULT.
Чтобы создать ограничение по умолчанию, вам необходимо иметь разрешение на выполнение ALTER TABLE и CREATE TABLE.
Добавление ограничения DEFAULT при создании новой таблицы
Это будет таблица с именем SalesDetails. Когда мы вставляем данные в эту таблицу без указания значения для столбца Sale_Qty, запрос должен вставить нуль. Чтобы добиться этого, я создаю ограничение по умолчанию с именем DF_SalesDetails_SaleQty на столбце Sale_Qty.
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')
Теперь посмотрим, что находится в таблице:

Как можно увидеть, в столбец Sale_Qty был вставлен нуль.
Если при создании таблицы, мы не указываем имя ограничения 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 создал ограничение со сгенерированным системой именем.
Добавление ограничение DEFAULT в существующую таблицу
Чтобы добавить ограничение для существующего столбца таблицы, используется оператор ALTER TABLE ADD CONSTRAINT:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
- tbl_name : задает имя таблицы, в которую вы хотите добавить ограничение по умолчанию.
- constraint_name : задает желаемое имя ограничения.
- column_name : задает имя столбца, для которого вы хотите создать ограничение по умолчанию.
- default_value : задает значение, которое вы хотите использовать при вставке.
Давайте сначала добавим столбец Product_name в SalesDetails:
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Вставляем данные в таблицу без указания значения для столбца Product_name. Запрос должен вставить N/A.
Для этого я создам ограничение по умолчанию с именем DF_SalesDetails_ProductName на столбце Product_name. Следующий запрос создает это ограничение:
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 является N/A.
Изменение ограничения DEFAULT
Мы можем изменить определение ограничения по умолчанию: сначала удалить существующее ограничение, а затем создать ограничение с другим определением.
Предположим, что вместо вставки N/A мы хотим вставлять Not Applicable. Сначала мы должны удалить ограничение 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 для просмотра данных в таблице SalesDetails:
USE demodatabase
go
SELECT *
FROM salesdetails
go

Видно, что значением столбца Product_name является Not Applicable.
Просмотр ограничения DEFAULT
Мы можем увидеть список ограничений DEFAULT с помощью Server Management Studio и выполнив запрос к динамическим административным представлениям.
Откройте SSMS и разверните Databases > DemoDatabase > SalesDetails > Constraint:

Видно, что созданы два ограничения с именами 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'

В столбце constraint_keys выводится определение ограничения по умолчанию.
Удаление ограничения
- Оператор ALTER TABLE DROP CONSTRAINT.
- Оператор DROP DEFAULT.
Alter table [tbl_name] drop constraint [constraint_name]
- tbl_name: задает имя таблицы, которая содержит столбец со значением по умолчанию.
- constraint_name: задает имя ограничения, которое требуется удалить.
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

Рассмотрим теперь оператор DROP DEFAULT. Он имеет следующий синтаксис:
DROP DEFAULT [constraint_name]
где constraint_name задает имя ограничения, которое требуется удалить.
Чтобы удалить ограничение с помощью оператора DROP DEFAULT, выполните следующий запрос:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Надеюсь, что эта информация и практические примеры поможет в вашей работе.
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись
Dev & Type
Разработка и проектирование программного обеспечения.
Как в Oracle Database установить значение поля по умолчанию
Для того чтобы сделать значение по умолчанию в Oracle есть три способа.
1. При создании таблицы:
CREATE TABLE test (name VARCHAR2(10), score NUMBER DEFAULT 0);
2. При добавлении столбца:
ALTER TABLE test ADD min_score NUMBER DEFAULT 0;
3. При редактировании столбца:
ALTER TABLE test ADD max_score NUMBER;
ALTER TABLE test MODIFY max_score DEFAULT 100;
Значение по умолчанию возвращается, если столбец содержит null-значение.
Например,
INSERT INTO test(name) VALUES(‘devtype’);
Т.к. для столбцов score , min_score , max_score не было указано значение, то они будут содержать null, а возвращать будут значение по умолчанию.
Значения по умолчанию
Для столбца может быть задано значение по умолчанию, т.е. значение, которое будет подставляться в том случае, когда оператор вставки не предоставляет значения для этого столбца. Как правило, значением по умолчанию выбирается наиболее часто встречающееся значение.
Пусть для нашей базы данных наибольшая часть моделей представляет собой ПК. Давайте установим для столбца type значение по умолчанию ‘PC’. Добавить значение по умолчанию можно с помощью оператора ALTER TABLE . Согласно стандарту, оператор для нашего примера имел бы вид:
Однако Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server не поддерживает в данном случае стандартный синтаксис; в диалекте T-SQL аналогичную операцию можно выполнить так:
Теперь при добавлении в таблицу Product модели ПК мы можем не указывать тип.
Заметим, что значением по умолчанию может быть не только литеральная константа, но и функция без параметров. В частности, мы можем использовать функцию CURRENT_TIMESTAMP , возвращающую текущее значение даты-времени. Давайте добавим столбец в таблицу Product, который будет содержать время, соответствующее выполнению операции добавления модели в БД.
Добавим модель 1125 производителя А
и посмотрим на результат
1. Если значение по умолчанию не указано, то подразумевается default NULL, т.е. NULL-значение. Естественно, это значение по умолчанию может быть использовано только в том случае, если на столбце нет ограничения NOT NULL.
2. Если добавить столбец в существующую таблицу, то он, согласно стандарту, будет заполнен значениями по умолчанию для имеющихся строк. В SQL Server поведение при добавлении столбца несколько отличается от стандартного. Если выполнить запрос
который добавляет в таблицу Product столбец available со значением по умолчанию ‘yes’, то, как это ни странно, столбец будет заполнен NULL-значениями. Чтобы «заставить» сервер заполнить столбец значениями ‘yes’, можно использовать один из двух способов:
a). Запретить NULL, т.е. написать такой запрос:
Ясно, что этот способ не годится, если столбец допускает значения NULL.
b). Использовать специальное предложение WITH VALUES :
