Wpf 填充CreatedOn、ModifiedOn列

Wpf 填充CreatedOn、ModifiedOn列,wpf,sql-server,wcf,Wpf,Sql Server,Wcf,我正在使用SQL Server构建WCF服务,WPF应用程序将使用该服务。我希望我的数据库表包含如下列: CreatedOn,CreatedBy,LastModifiedOn,LastModifiedBy 有没有一种方法可以自动创建这些值,或者如果没有,我可以创建它们,但它们的值是否可能以某种方式由SQL server填充 感谢在此做了两个假设-CreatedBy/ModifiedBy将填充一个系统变量,如SUSER\u SNAME(),修改后的值应反映最初创建的值。假设此基表: USE tem

我正在使用SQL Server构建WCF服务,WPF应用程序将使用该服务。我希望我的数据库表包含如下列: CreatedOn,CreatedBy,LastModifiedOn,LastModifiedBy

有没有一种方法可以自动创建这些值,或者如果没有,我可以创建它们,但它们的值是否可能以某种方式由SQL server填充


感谢

在此做了两个假设-
CreatedBy
/
ModifiedBy
将填充一个系统变量,如
SUSER\u SNAME()
,修改后的值应反映最初创建的值。假设此基表:

USE tempdb;
GO
CREATE TABLE dbo.foo(fooID INT PRIMARY KEY);
GO
进行以下修改:

ALTER TABLE dbo.foo ADD CreatedOn SMALLDATETIME 
    NOT NULL DEFAULT CURRENT_TIMESTAMP;

ALTER TABLE dbo.foo ADD CreatedBy NVARCHAR(32)
    NOT NULL DEFAULT SUSER_SNAME();

ALTER TABLE dbo.foo ADD ModifiedOn SMALLDATETIME 
    NOT NULL DEFAULT CURRENT_TIMESTAMP;

ALTER TABLE dbo.foo ADD ModifiedBy NVARCHAR(32)
    NOT NULL DEFAULT SUSER_SNAME();
GO
现在,您只需要一个触发器来处理后续更新:

CREATE TRIGGER dbo.foo_audit
ON dbo.foo
FOR UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS (SELECT 1 FROM deleted)
    BEGIN
        UPDATE f
            SET ModifiedOn = CURRENT_TIMESTAMP,
                ModifiedBy = SUSER_SNAME()
            FROM dbo.foo AS f
            INNER JOIN inserted AS i
            ON f.fooID = d.fooID;
    END
END
GO

如果您需要从应用程序中传入用户名,那么WCF将必须提供帮助。

使用触发器很容易做到这一点。在进行另一次修改之前,您是否希望修改的列反映已创建的列,或者在第一次更新之前,您是否希望这些列为
NULL
?另外,您希望存储的用户名是基于应用程序的,还是SQL/Windows身份验证用户名?我只是不确定WCF是否能够真正忽略表中的列。谢谢你的回复。修改的列应与创建的列相同。用户名存储在自定义表中。因此,如果用户名是特定于应用程序的,那么SQL Server只会在知道谁调用了存储过程的情况下更新这些列。它只会知道,如果您将其传递到处理插入/更新的存储过程中,那么您需要对此进行修改。如果您从我的脚本中删除所有
SUSER\u SNAME()
部分,它将为您处理日期/时间,但如果不修改DML,您将无法审核用户名。