我希望有人能在这个问题上指出我正确的方向。这是我到目前为止的工作。
SELECT * FROM sys.identity_columns
是一个系统视图,它提供“last_value”,但该视图的定义使用内部函数IdentityProperty(colName, 'LastValue')
- 所以这是一个死胡同(不是从那里的系统表中拉出来的)。
互联网上的任何地方(我看过)都建议使用DBCC IDENT_...
命令来发现价值,但这仍然让我对它的实际存储位置一无所知。
DBCC PAGE(TestDB,1,1325,3)
因此,我开始使用我的测试工具 db搜索各个页面,并使用RESEED
命令在值 10 和 12 之间重新设置种子。
在这样做时,我注意到 , 上的十六进制值IAM: Header
都IAM: Single Page Allocations
发生IAM: Extent Alloc Status Slot 1
了变化。(并意识到它们会随着bUse1值的变化而周期性变化,bUse1 值也会自行递增)。
所以另一个死胡同,我完全没有想法。我还能在哪里搜索?
我正在运行 SQL Server 2014。我对内部知识有着永不满足的渴望,并且还没有遇到像这样难以捉摸的东西。它引起了我的注意,因为从理论上讲,它(绝对值)存储在某个地方并且应该(可以说)是可定位的。在我寻找内部存储数据/元数据位置的过程中,这个特殊的价值让我觉得特别难以捉摸。我猜/希望有人会过来告诉我,你可以得到它,DBCC PAGE
但我找错地方了。
如果您可以访问 DAC(专用管理员控制台
INT
),则可以通过查看 中的idtval
列来检查列的标识列的值sys.syscolpars
。感谢Martin Smith通过Roi Gavish对此处相关问题的这个非常有用的回答将我引导到该表。
以下面的临时表为例:
让我们看看表包含的内容:
可以通过以下代码检查身份值:
对于
BIGINT
标识列,我们需要扩展代码中使用的一些变量的大小,例如:结果
BIGINT
: