gpt4 book ai didi

sql - SQL Server 中的 DateCreated 列?

转载 作者:行者123 更新时间:2023-12-02 14:07:05 30 4
gpt4 key购买 nike

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

或者..当我手动执行查询时,我是否必须向其提供日期时间?

最佳答案

默认值有两个主要缺点。

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

这意味着您无法确定这些值是否在您的控制之外进行了修改。

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

用于将列设置为当前日期的插入触发器和用于防止更改该列(或者更准确地说,将其设置为其当前值)的更新触发器是实现 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

关于sql - SQL Server 中的 DateCreated 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555567/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com