我正在使用SQL Server构建WCF服务,该服务将由WPF应用程序使用。我希望我的数据库表包含如下列: CreatedOn,CreatedBy,LastModifiedOn,LastModifiedBy
有没有办法自动创建这些,或者如果不是我可以创建它们,但是它可能以某种方式由SQL服务器填充它们的值吗?
由于
答案 0 :(得分:1)
在这里做了几个假设 - CreatedBy
/ ModifiedBy
将填充系统变量,例如SUSER_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将不得不提供帮助。