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テーブルから値を再帰的に引き出す
は
これは、ID = 3のレコードが、そのすべての古いバージョンではないだけを置くべきで、ID = 3
#customer SELECT * FROMように私は、コマンドを発行しています、つまりレコード2と1もあります。 #customer IDから
選択* = 4
は、そのレコードだけを引く必要があります(oldid = null)の
強化(オプション):誰かがcommondを発行する場合
select * from #customer id = 8
私はどういうわけか、この顧客に新しいレコードが存在することを示したいと思います。どうやってやるの?私はASP.NETアプリケーションで使用するつもりであると仮定します。
は、私はそれを自分自身を試してみました[この](http://stackoverflow.com/questions/959804/simulation-of-connect-by-prior-of-oracle-in-sql-server) – StevieG
を見て2〜3時間。私はあなたが 'Common Table Expression'を使わなければならないことは知っていますが、これまでのところそれを得ることはできません。 –