如何识别表是否具有标识列

如何识别表是否具有标识列

问题描述:

我想知道该表是否具有标识列。表是我不知道的。我还没有完成桌子的结构。使用查询?如何识别表是否具有标识列

我正在使用Sql Server精简版。

+5

不要忘记标记答案为接受,如果你有你想要的信息 – 2011-06-13 17:13:10

+0

另请参见[你如何确定什么SQL表以编程方式具有标识列](http://stackoverflow.com/q/87747) – 2016-06-10 08:47:54

这是查询哪个返回标识列名;

create procedure GetIdentity 
@tablename varchar(50) 
begin 
    SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
      NAME AS COLUMNNAME, 
      SEED_VALUE, 
      INCREMENT_VALUE, 
      LAST_VALUE, 
      IS_NOT_FOR_REPLICATION 
    FROM  SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename 
end 

然后形成代码端。

使用datareader角色调用此存储过程,然后检查datareader.hasrows()。如果条件值为真(1),则该表具有标识列(如果已设置)。如果不是,那么它没有标识列。

+0

请你能详细说明这个问题吗?谢谢你 – Shiny 2010-05-20 08:35:27

+0

检查现在的答案 – 2010-05-20 09:12:04

做到这一点的一种方法是利用存储过程sp_help。即:

sp_help MyTable 

这将返回有你需要在桌子上的所有信息的数据集。有一个具有身份信息的特定表。

即:

如果它不包含的标识字段标识列会说:“没有定义标识列”。

+0

我会补充说你可以突出显示表的名称,然后在SSMS中使用键盘组合ALT + F1作为快捷键。 – 2017-08-03 17:42:54

@Pranay:他说精简版。存储过程不受支持,并且没有sys.anything。

这是呼叫:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

这将返回1(真)或0(假)。

+0

不适用于我 - 无列“AUTO_INC_INCREMENT” – 2016-03-07 07:04:08

+0

您有额外的下划线 – Patrick 2016-03-07 15:58:47

任何下面的查询可以用来检查是否包含标识列存在于该表

1)

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName' 

2)

SELECT * 
FROM sys.identity_columns 
WHERE object_id = (
     SELECT id 
     FROM sysobjects 
     WHERE name = 'TableName' 
    ) 

我知道它的很长一段时间但我发现这有帮助

试试这个:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 

这一点,让ü所有的表名,表的COLUMNNAMES和is_identity或不选择的数据库

SELECT 
    sys.columns.name 
    , sys.tables.name 
    , is_identity 
FROM sys.columns 
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id 
    AND sys.columns.is_identity = 1 

IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty可以启动SQL Server 2008中参考查询: OBJECTPROPERTY

我只想添加此选项以及我认为这是最简单的

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

我同意@johnmcp。这个选项确实很简单,当列是标识时返回1,当列不是标识列时返回0 – Rajat 2017-02-03 11:02:48