2014-08-31 123 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场,我可以把一个(“未知”)默认值,但就像我说的,是有可能这个领域在默认情况下得到插在国家字段中的值,如果没有被放在它?

+0

你可以用触发器来做到这一点。换句话说,在插入之前,如果该字段为空,则将其设置为其他字段中的值。 – 2014-08-31 01:46:47

+0

触发器往往会使数据库难以维护。我会在应用程序层解决这个问题。 – Andomar 2014-08-31 03:33:45

回答

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'作为'AFTER INSERT,UPDATE'。它会以相同的方式工作([链接](http://stackoverflow.com/questions/741414/insert-update-trigger-how-to-determine-if-insert-or-update/7430369#7430369))和答案会添加更多信息。可以使用[小提琴](http://sqlfiddle.com/#!6/3f974/1)进行测试。 – Zanon 2014-08-31 03:31:20

0

我认为这是不容易在表级别这样做后,权更新一列。有一些解决方法可以做到这一点: 1.如果你正在使用存储过程,那么你可以在那里写你的逻辑。 2.触发器也是一种选择,但是在执行方面的开销。

谢谢。