我正在尝试使用sql表来实现一个FIFO队列。从加入时删除CTE
我有以下的SQL(修改发布),加入和参数的使用对于这个过程的工作方式很重要。
With cte as (
select top(1) q.* from queue q with (readpast)
inner join MyTable a on q.id = a.myTableID AND myTable.procID = @myParam
order by q.Data asc
)
delete from cte
output
deleted.ID,
deleted.col1
运行此语句返回一个错误“视图或函数‘CTE’不可更新,因为修改会影响多个基表。”
我明白为什么会抛出错误,但我无法弄清楚是如何解决它的。任何意见将不胜感激!
这正是我正在寻找的,谢谢! – Jay
对于Kieninger提供的示例,这种方法的好处在于,它提供了一种构建DELETE命令的一致方法,您可以在其中首先测试SELECT的结果以查看cte中的DELETE行将影响哪些行。 –