我想要一个 SQL Server 函数dbo.GetNextNumber()
,它会为每个调用生成序列号。据我了解,使用本机 T-SQL 函数是不可能的,因为 SQL Server 坚持认为函数必须是确定性的。但是,如果您可以向我展示一个执行此操作的本机 T-SQL 函数,那真的会让我很开心。
我想也许这可以使用 CLR 函数来编写。由于 CLR 函数是静态的,因此序列号需要存储在 set 操作的调用上下文中,因为将其存储为静态变量会导致多个连接使用相同的序列,从而导致序列号不那么连续。我对嵌入式 CLR 了解得不够多,无法从 CLR 端访问设置操作(选择、更新、删除、插入)的调用上下文。
在一天结束时,以下查询
select dbo.GetNextNumber() from sysobjects
必须返回结果
1
2
3
4
5
如果需要另一个函数调用来重置上下文是可以的,例如
exec dbo.ResetSequenceNumbers()
为了防止一些误解并减少浪费时间回答错误问题的机会,请注意,我不是在寻找表格的 ID 生成功能,而且我知道一些涉及到一些带有标识列的临时表。该ROW_NUMBER()
功能很接近,但它也没有削减。
非常感谢您的任何回复
凯末尔
PS 令人惊讶的是,SQL Server 确实为此提供了内置函数。一个函数(前提是它不能在连接和 where 子句中使用)确实很容易做并且非常有用,但由于某种原因它没有被包括在内。