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
Это симуляция, когда запись возобновляется, в новой записи хранится идентификатор старой записи. Цепь продолжается и опускается до самой первой записи, созданной для этого клиента.вывести значения из таблицы sql
То, что я хочу, я выполняю команду как
выберите * из #customer где ID = 3
Это должно ставить не только запись с идентификатором = 3, но все его старой версии , то есть записи 2 и 1 также.
выберите * из #customer ид = 4
следует тянуть только то, что запись (oldid = нуль)
Enhancement (по желанию): Если кто-то выдает commond
выберите * from #customer, где id = 8
Я хотел бы указать, что для этого клиента существует новая запись. Как я могу это сделать? Предположим, что я собираюсь использовать в приложении ASP.NET.
посмотреть на [это] (http://stackoverflow.com/questions/959804/simulation-of-connect-by-prior-of-oracle-in-sql-server) – StevieG
Я пробовал сам за пару часов. Я знаю, что вам нужно использовать «Common Table Expression», но до сих пор не может быть прав. –