在SQL Server中使用存储进程/函数实现堆栈(LIFO)



我正在考虑在SQL Server中编写堆栈(LIFO)实现。我想要一个将字符串压入堆栈的函数,一个将字符串从堆栈中弹出的函数,以及一个获取堆栈上当前值的函数。到目前为止,我正在使用IDENTITY来跟踪堆栈,但有人有更好的实现或一些提示如何在sql server中实现这一点吗?

我将使用这样一个表:

create table Stack(id int not null identity primary key, value nvarchar(max))

推:

insert into Stack (value) values ('pushed value')

Peek:

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是聪明的,做扫描"向后",因此无论如何只打一行。因此,实际上,所有的操作都是0(1)。

最新更新