Sql server 2005 标识列的种子值和增量值在哪里?
我使用sys.*视图收集元数据,根据文档,sys.identity\u columns视图将返回种子值和增量值,如下所示Sql server 2005 标识列的种子值和增量值在哪里?,sql-server-2005,metadata,system-views,Sql Server 2005,Metadata,System Views,我使用sys.*视图收集元数据,根据文档,sys.identity\u columns视图将返回种子值和增量值,如下所示 CREATE TABLE ident_test ( test_id int IDENTITY(1000,10), other int ) SELECT name, seed_value, increment_value FROM sys.identity_columns WHERE object_id = OBJECT_ID( 'ident_test' )
CREATE TABLE ident_test (
test_id int IDENTITY(1000,10),
other int
)
SELECT name, seed_value, increment_value
FROM sys.identity_columns
WHERE object_id = OBJECT_ID( 'ident_test' )
但是,上面的查询只返回一列。只是我吗
注意:我不得不对这个问题的早期版本做一些修改。您确定要在包含标识列的表的数据库中运行这个问题吗 返回常规生产数据库中具有几个标识的行 使用左连接将返回这些行以及许多非标识行 我在另一个数据库上运行了这个程序,我注意到即使在内部连接情况下也会返回一些null。这是因为某些列位于视图中 尝试添加:
INNER JOIN sys.tables t
ON t.object_id = c.object_id
仅筛选到表中的实际标识列。是否应反转from和join,如下所示:
SELECT c.name, i.seed_value, i.increment_value
from sys.identity_columns i
join sys.columns c
ON i.object_id = c.object_id
AND i.column_id = c.column_id
您缺少Where子句。您的查询实际上是在说“给我所有sys.columns和sys.identity\u列中的任何匹配行,但如果没有匹配行,则给我null” 通过在下面添加Where子句,您将其更改为仅返回精确匹配的位置,这与此实例中的内部联接实际上是相同的 挑选 c、 名称,i.种子值,i.增量值 从…起 sys.c列 左外连接sys.identity\u列i 在i.object\u id=c.object\u id上 i.column\u id=c.column\u id 其中I.seed_值不为空
因此,我认为您的数据是正确的,但没有可查看的结果。您的查询将返回我期望的结果[见下文];它返回关于单个标识列test_ID的单个元数据行。在表ident_test中,oter列other在sys.identity_列中没有元数据,因为它不是标识 SELECT name, seed_value, increment_value FROM sys.identity_columns WHERE object_id = OBJECT_ID( 'ident_test' ) select name, is_identity, is_nullable from sys.columns WHERE object_id = OBJECT_ID( 'ident_test' ) 给 name seed_value increment_value ----------------------------------------- test_id 1000 10 (1 row(s) affected) name is_identity is_nullable ------------------------------------- test_id 1 0 other 0 1 (2 row(s) affected)
请给我们一个示例数据库,每个相关表中有2-3行。谢谢提示。。。正如你所看到的,当我注意到这些字段根本没有被返回时,我不得不改变这个问题。无论示例表是否有行,结果都是相同的。现在您已经编辑了问题,我的答案没有任何意义:不过,我很高兴你找到了答案。不,因为这只会返回标识列。我想要所有的列,并且只有那些扩展属性(如果可用)。好吧,当我运行您的原始查询时,它可以正常工作。我以为您想从输出中删除所有非标识列。我说可以,因为当我在我的小数据库上运行您的查询时,它会返回400多行,包括我的标识字段。数据按预期返回,如果不是标识列,则返回null,如果为空,则返回时填写。你在找什么?请举个例子,我想这就是我想知道的。它应该像你描述的那样工作。为了简化示例,我最初省略了一个表过滤器。所以我认为我的SQL Server副本有问题。听起来像是这样。如果您已从中选择col1、col2、col3。。。您最好返回3列! name seed_value increment_value ----------------------------------------- test_id 1000 10 (1 row(s) affected) name is_identity is_nullable ------------------------------------- test_id 1 0 other 0 1 (2 row(s) affected)