2011-01-07 75 views
0

我在SQL Server 2005中有一个表,其中包含一些项目的一些更新日志数据。由于有数百个项目,因此可以将这些数据存储在一张表中,并且可以查询项目日志表,查看每天或每人的活动等情况。表中的多个序列ID号


projectlogidentity int identity
projectname nvarchar(100)
projectchanged datetime
projectchangedby nvarchar(100)
projectserial int

上有项目名称索引和projectserial

我要生成每个项目顺序projectserial作为行添加

如:

0 |咖啡店| 2011年1月7日08:13 | derek | 0
1 |迪斯科| 2011年1月7日08:18 |艾玛| 0
2 |咖啡店| 2011年1月7日08:19 |彼得| 1
3 |迪斯科| 2011年1月7日09:11 |艾伦| 1
4 |咖啡店| 2011年1月7日09:42 |苔丝| 2

所以,当通过projectname检索单个项目的行时,每个特定于该项目名称的行都有一个持续的序列号。

插入行后,我做目前:

update projectlog set projectserial=1+ 
(select isnull(max(projectserial),0) from projectlog 
where projectname='coffee shop') where (projectlogidentity=4); 

,但我很担心性能时,该表将包含数百个项目的几千行和数百人。有没有更好的办法?

感谢

德里克

回答

1

我想你可以用两个表表现。

projectlog 
---------- 
projectlogidentity int identity 
projectnameid int 
projectchanged datetime 
projectchangedby nvarchar(100) 
projectserial int 


projectlog_projectname 
---------------------- 
id int 
name nvarchar(100) 
serial int 

UPDATE projectlog SET projectserial = 1 + (SELECT ISNULL(serial, 0) FROM projectlog_projectname WHERE projectname='coffee shop') 
WHERE projectlogidentity = 4; 
UPDATE projectlog_projectname SET serial += 1 WHERE projectname='coffee shop' 
0

使用它eaxclty它是什么

IF EXISTS (SELECT name FROM sysobjects 
     WHERE name = 'Incrementprojectserial' AND type = 'TR') 
    DROP TRIGGER IncrementProjectserial 
GO 
CREATE TRIGGER IncrementProjectserial 
ON projectlog 
FOR INSERT 
AS 

DECLARE @projectname varchar(10) --whatever you datatype is 
DECLARE @projectlogidentity int 
DECLARE @Maxprojectserial int 

-- GET YOUR INSERTED VALUES 
SELECT @projectname = projectname FROM INSERTED 
SELECT @projectlogidentity = projectlogidentity FROM INSERTED 

--GET YOUR PREVIOUS projectserial 
SELECT @projectserial = isnull(max(projectserial),0) 
FROM projectlog 
WHERE [email protected]) 

--UPDATE YOUR NEW VALUE 
UPDATE projectlog SET projectserial = @Maxprojectserial + 1 
WHERE projectlogidentity = @projectlogidentity 

GO 

这里创建一个触发器是一个完整的msdn文档

+0

此触发器不适用于多行插入。 – 2011-01-07 10:30:09

+0

我没有测试过这个,但它应该为插入的每一行运行,请纠正,如果我错了..我不确定有关批量插入,虽然 – Gaven 2011-01-07 10:34:48