2014-08-31 12 views
1

Я не знаю, возможно ли это, но я хотел бы знать, если при создании таблицы, значение поля которой по умолчанию, мы можем сделать это значение по умолчанию получить значение другого столбец при вставке строки.SQL Server - Значение по умолчанию

Create Table Countries (
    ID Int Not Null Identity(1,1), 
    CountryCode Char (2) Not Null, 
    Country Varchar (50) Not Null, 
    CountryRegion Varchar (50) Null Default ('Country'), 
    Nationality Varchar (75) Not Null Default ('Not Known'), 
    InsertDate Datetime2 Not Null Default Getdate(), 
     Constraint PK_CountryCode Primary Key (CountryCode)); 

На поле CountryRegion, я мог бы поместить («Unknown») значение по умолчанию, но, как я сказал, это возможно, это поле получает по умолчанию значение вставляется в поле Страна, если ничего не помещается на него?

+0

Вы можете сделать это с помощью триггера. Другими словами, перед вставкой, если поле равно null, установите его в значение в другом поле. –

+0

Триггеры, как правило, делают базу данных трудно поддерживать. Я бы решил это на прикладном уровне. – Andomar

ответ

1

Использование триггера будет делать - ОБНОВЛЕНИЕ колонки сразу после вставки

CREATE TRIGGER CountriesTrigger ON Countries AFTER INSERT   
AS 
BEGIN 

    SET NOCOUNT ON 

    UPDATE Countries 
    SET 
    Countries.CountryRegion = inserted.Country 
    FROM Countries, inserted 
    WHERE Countries.ID = inserted.ID 
     AND inserted.CountryRegion is null 

END 
+1

Я предлагаю изменить 'AFTER INSERT' для' ПОСЛЕ ВСТАВКИ, ОБНОВЛЕНИЕ'. Он будет работать таким же образом ([link] (http://stackoverflow.com/questions/741414/insert-update-trigger-how-to-determine-if-insert-or-update/7430369#7430369)) и ответ добавит больше информации. Его можно протестировать с помощью этой [скрипки] (http://sqlfiddle.com/#!6/3f974/1). – Zanon

0

Я думаю, что нет легко сделать это на уровне таблицы. Для этого необходимо обходное решение: 1. Если вы используете хранимые процедуры, вы можете написать свою логику там. 2. Триггер также является опцией, но накладными расходами с точки зрения исполнения.

Спасибо.

Смежные вопросы