【问题标题】:SQL Server - Default valueSQL Server - 默认值
【发布时间】:2014-10-24 15:25:55
【问题描述】:

我不知道这是否可能,但我想知道当我们创建一个字段具有默认值的表时,我们是否可以让这个默认值在插入行时获取另一列的值。

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')默认值,但就像我说的,如果没有放置任何内容,该字段是否有可能默认插入 Country 字段中的值?

【问题讨论】:

  • 您可以使用触发器来执行此操作。换句话说,在插入之前,如果该字段为空,则将其设置为另一个字段中的值。
  • 触发器往往会使数据库难以维护。我会在应用层解决这个问题。

标签: sql sql-server default-value


【解决方案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

【讨论】:

  • 我建议将AFTER INSERT 更改为AFTER INSERT, UPDATE。它将以相同的方式工作(link),答案将添加更多信息。可以用这个fiddle进行测试。
【解决方案2】:

我认为在 TABLE 级别做到这一点并不容易。有一些解决方法可以做到这一点: 1.如果您使用的是存储过程,那么您可以在那里编写您的逻辑。 2. 触发器也是一种选择,但在执行方面会产生开销。

谢谢。

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多