我正在研究在SQL Server中编写堆栈(LIFO)实现。我想有一个函数将字符串压入堆栈,一个将字符串弹出堆栈的函数和一个获取堆栈当前值的函数。到目前为止,我正在寻找使用IDENTITY来跟踪堆栈,但是有没有人有更好的实现或者如何在sql server中实现它的一些提示?
答案 0 :(得分:3)
我会使用这样的表:
create table Stack(id int not null identity primary key, value nvarchar(max))
推送:
insert into Stack (value) values ('pushed value')
皮克:
select top 1 value from Stack order by id desc
流行:
declare @id int, @value nvarchar(max)
select top 1 @id=id, @value=value from Stack order by id desc
if @id is null begin
-- handle stack-underflow here
end
delete from Stack where id=@id
select @value
它不是内部的堆栈,因为SQL Server必须进行索引扫描才能获得最近添加的项目,而不是仅仅使用堆栈指针。
然而,从我的测试来看,似乎SQL Server很聪明并且扫描"向后",因此无论如何只能命中一行。因此,实际上所有操作都是O(1)。