Sql Server中的DateCreated列?

Kin*_*tor 6 sql sql-server sql-server-2005 datecreated linq-to-sql

有没有一种特殊的方法来声明MS Sql Server表中的DateCreated列,以便在创建时自动用适当的时间戳填充它?

或者..我在手动查询时是否必须提供日期时间?

pax*_*blo 16

默认值有两个主要缺点.

  • 如果insert语句指定列的值,则不使用默认值.
  • 该列可以随时更新.

这意味着您无法确定值是否未在您的控件之外进行修改.

如果您想要真正的数据完整性(以便确定行中的日期是创建日期),则需要使用触发器.

用于将列设置为当前日期的插入触发器和用于防止更改该列的更新触发器(或者更确切地说,将其设置为其当前值)是实现DateCreated列的方法.

用于将列设置为当前日期的插入和更新触发器是实现DateModified列的方法.

(从用户Gabriel编辑 - 这是我尝试按照描述实现这一点 - 我不是100%确定它是正确的但我希望OP审查它......):

CREATE TRIGGER [dbo].[tr_Affiliate_IU] 
   ON  [dbo].[Affiliate] 
   AFTER INSERT, UPDATE
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Get the current date.
    DECLARE @getDate DATETIME = GETDATE()

    -- Set the initial values of date_created and date_modified.
    UPDATE
        dbo.Affiliate
    SET 
         date_created = @getDate
    FROM
        dbo.Affiliate A 
        INNER JOIN INSERTED I ON A.id = I.id
        LEFT OUTER JOIN DELETED D ON I.id = D.id
    WHERE
        D.id IS NULL

    -- Ensure the value of date_created does never changes.
    -- Update the value of date_modified to the current date.
    UPDATE
        dbo.Affiliate
    SET
         date_created = D.date_created
        ,date_modified = @getDate
    FROM 
        dbo.Affiliate A 
        INNER JOIN INSERTED I ON A.id = I.id
        INNER JOIN DELETED D ON I.id = D.id 
END
Run Code Online (Sandbox Code Playgroud)


Haa*_*ked 10

您可以将列的默认值设置为"getdate()"