假設 i)歷史表不會因任何原因而改變。
ii)由於您一次將顯示50,100,150條記錄,因此不會出現問題。
試試這個,讓我知道,
create table #side ([Id] [int] IDENTITY NOT NULL,
[Title] [varchar](50) NOT NULL,
[Description] [varchar](250) NULL)
create table #h ([HistId] [int] IDENTITY(1,1) NOT NULL,
[Id] [int] NOT NULL,
[Title] [varchar](50) NOT NULL,
[Description] [varchar](250) NULL,
[TypeId] [int] NULL,
[ActionUser] [int] NULL,
[ActionCode] [char](1) NOT NULL,
[ActionDate] [datetime] NOT NULL,
[ValidUntil] [datetime] NULL)
insert into #side ([Title],[Description]) values ('a','abc')
insert into #h ([Id],[Title],[Description],[TypeId],[ActionUser],[ActionCode],[ActionDate],[ValidUntil]) values (1,'a','abc',123,991,'i','01/01/2010',NULL)
declare @mod datetime;
set @mod = '01/02/2010'
insert into #h ([Id],[Title],[Description],[TypeId],[ActionUser],[ActionCode],[ActionDate],[ValidUntil]) values (1,'b','abc',123,991,'u',@mod,NULL)
insert into #h ([Id],[Title],[Description],[TypeId],[ActionUser],[ActionCode],[ActionDate],[ValidUntil]) values (1,'c','abc',123,991,'u',@mod,NULL)
insert into #h ([Id],[Title],[Description],[TypeId],[ActionUser],[ActionCode],[ActionDate],[ValidUntil]) values (1,'c','def',123,991,'u',@mod,NULL)
insert into #h ([Id],[Title],[Description],[TypeId],[ActionUser],[ActionCode],[ActionDate],[ValidUntil]) values (1,'d','pqr',123,991,'u',@mod,NULL)
select * from #h order by HistId Desc
--select * from #side
select h.HistId, case when h.ActionCode='i' THEN
'Record with Title "'+h.title+'" inserted '
when h.ActionCode='u' THEN
'Records '+ case
when h.title<>h1.title and h.[Description]<>h1.[Description] then 'Title,Description was updated from
"'+h1.title+'","'+h1.[Description]+'" to " '+h.title+' " , "'+h.[Description]+'" respectively'
when h.title<>h1.title then 'Title was updated from "'+h1.title+'" to " '+h.title+' " '
when h.[Description]<>h1.[Description] then 'Description was updated from "'+h1.[Description]+'" to " '+h.[Description]+' " '
else '' end
when h.ActionCode='d' THEN
'Record was deleted'
else
null
END
+'by '+cast(h.ActionUser as varchar)+' on '+convert(varchar(10),h.actiondate ,120)+''
from #h h
left join #h h1
on h.HistId=(h1.HistId+1)
--left join #usertable u
--on u.userid=h.[ActionUser]
drop table #h
drop table #side