Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 标识列的种子值和增量值在哪里?_Sql Server 2005_Metadata_System Views - Fatal编程技术网

Sql server 2005 标识列的种子值和增量值在哪里?

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' )

我使用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' )
但是,上面的查询只返回一列。只是我吗


注意:我不得不对这个问题的早期版本做一些修改。

您确定要在包含标识列的表的数据库中运行这个问题吗

返回常规生产数据库中具有几个标识的行

使用左连接将返回这些行以及许多非标识行

我在另一个数据库上运行了这个程序,我注意到即使在内部连接情况下也会返回一些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)