【发布时间】:2012-02-06 19:30:04
【问题描述】:
create table #customer (
id int not null primary key,
cust_name varchar(12),
oldid int null
)
insert into #customer values(1,'XYZ',null)
insert into #customer values(2,'XYZ',1)
insert into #customer values(3,'XYZ',2)
insert into #customer values(4,'ABC',null)
insert into #customer values(5,'ABC',4)
insert into #customer values(6,'DEF',null)
insert into #customer values(7,'DEF',6)
insert into #customer values(8,'DEF',7)
insert into #customer values(9,'DEF',8)
select * from #customer
-- output
id cust_name oldid
----------- ------------ -----------
1 XYZ NULL
2 XYZ 1
3 XYZ 2
4 ABC NULL
5 ABC 4
6 DEF NULL
7 DEF 6
8 DEF 7
9 DEF 8
这是更新记录时的模拟,新记录存储其旧记录的ID。这条链继续下去,一直到为该客户创建的第一条记录。
我想要的是我发出类似的命令
select * from #customer where id=3
这不仅应该放 id=3 的记录,还应该放它的所有旧版本,也就是记录 2 和 1。
从 #customer id=4 中选择 *
应该只提取那条记录(oldid = null)
增强(可选):如果有人发布了一个command
select * from #customer where id=8
我想以某种方式表明,该客户存在一条新记录。我怎样才能做到这一点?假设我要在 ASP.NET 应用程序中使用。
【问题讨论】:
-
看看this
-
我自己试了几个小时。我知道你必须使用
Common Table Expression,但到目前为止还不能正确使用。
标签: sql sql-server-2005 common-table-expression