Sql server 2008 为SQL Server中的表创建日志
我有一个表Sql server 2008 为SQL Server中的表创建日志,sql-server-2008,tsql,logging,Sql Server 2008,Tsql,Logging,我有一个表Sample和另一个SampleLog 有了这些结构,我想将代码写入日志。您可以在表的结构之后看到我的代码 CREATE TABLE [dbo].[Sample]( [ID] [int] NULL, [Name] [varchar](10) NULL ) CREATE TABLE [dbo].[SampleLog]( [ID] [int] NULL, [Name] [varchar](10) NULL, [Date] [datetime] NULL,
Sample
和另一个SampleLog
有了这些结构,我想将代码写入日志。您可以在表的结构之后看到我的代码
CREATE TABLE [dbo].[Sample](
[ID] [int] NULL,
[Name] [varchar](10) NULL
)
CREATE TABLE [dbo].[SampleLog](
[ID] [int] NULL,
[Name] [varchar](10) NULL,
[Date] [datetime] NULL,
[UserName] [varchar](100) NULL,
[Type] [char](1) NULL
)
我已经写了这段代码,但它不适用于删除和更新
CREATE TRIGGER SampleTrigger ON Sample
AFTER INSERT, UPDATE, DELETE
AS
DECLARE
@ID int ,
@Name varchar(10),
@Date datetime,
@UserName VARCHAR(128) ,
@Type CHAR(1) ,
@sql nvarchar(500)
SELECT
@UserName = SYSTEM_USER ,
@Date = CONVERT(VARCHAR(8), GETDATE(), 112)
+ ' ' + CONVERT(VARCHAR(12), GETDATE(), 114)
IF EXISTS (SELECT * FROM inserted)
BEGIN
IF EXISTS (SELECT * FROM deleted)
BEGIN
SELECT @Type = 'U'
select @ID = ID from deleted
select @Name = Name from deleted
END
ELSE
BEGIN
SELECT @Type = 'I'
select @ID = ID from inserted
select @Name = Name from inserted
END
END
ELSE
BEGIN
SELECT @Type = 'D'
select @ID = ID from deleted
select @Name = Name from deleted
END
insert into SampleLog(ID, Name, Date, UserName, Type)
values(@ID, @Name, @Date, @UserName, @Type)
SQL Server给了我这个错误
Updated或deleted的行值不会使行唯一,或者会改变多行(2行)
您已经为单行更新和删除编写了代码。思维定势
CREATE TRIGGER SampleTrigger ON Sample after INSERT, UPDATE, DELETE
AS
SET NOCOUNT ON;
insert into SampleLog
(ID,Name,Date,UserName,Type)
SELECT
D.ID, D.NAME, GETDATE(), SYSTEM_USER,
CASE WHEN I.ID IS NULL THEN 'D' ELSE 'U' END
FROM
DELETED D
LEFT JOIN
INSERTED I ON D.ID = I.ID
UNION ALL
SELECT
I.ID, I.NAME, GETDATE(), SYSTEM_USER, 'I'
FROM
INSERTED I
LEFT JOIN
DELETED D ON D.ID = I.ID
WHERE
D.ID IS NULL
GO
请回顾一下你的接受率和投票率:尊重那些通过回答你的问题来帮助你的人……只是一个旁白——为什么所有的日期解析都要把它放在datetime列中呢?这是毫无意义的。另外,如果你接受一些答案,人们会更愿意帮助你。谢谢。完美的