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。該鏈條繼續下降到爲該客戶創建的第一個記錄。從sql表中遞歸拉取值
我要的是我發出了一個命令,像
SELECT * FROM #customer其中id = 3
這應該放不僅ID = 3,但其所有的舊版本記錄,這也是記錄2和1。
SELECT * FROM #customer ID = 4
應僅拉出該記錄(OLDID = NULL)
增強(可選):如果有人發出commond
select * from #customer where id = 8
我想某種程度上想指出,這個客戶有一個新的記錄。我怎樣才能做到這一點?假設我將在ASP.NET應用程序中使用。
看看[這](http://stackoverflow.com/questions/959804/simulation-of-connect-by-prior-of-oracle-in-sql-server) – StevieG 2012-02-06 19:50:55
我嘗試過自己大概幾個小時。我知道你必須使用'Common Table Expression',但是目前爲止還沒有完成。 – 2012-02-06 19:53:38