如何识别表是否具有标识列
这是查询哪个返回标识列名;
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
),则该表具有标识列(如果已设置)。如果不是,那么它没有标识列。
请你能详细说明这个问题吗?谢谢你 – Shiny 2010-05-20 08:35:27
检查现在的答案 – 2010-05-20 09:12:04
做到这一点的一种方法是利用存储过程sp_help
。即:
sp_help MyTable
这将返回有你需要在桌子上的所有信息的数据集。有一个具有身份信息的特定表。
即:
如果它不包含的标识字段标识列会说:“没有定义标识列”。
我会补充说你可以突出显示表的名称,然后在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(假)。
不适用于我 - 无列“AUTO_INC_INCREMENT” – 2016-03-07 07:04:08
您有额外的下划线 – 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')
我同意@johnmcp。这个选项确实很简单,当列是标识时返回1,当列不是标识列时返回0 – Rajat 2017-02-03 11:02:48
不要忘记标记答案为接受,如果你有你想要的信息 – 2011-06-13 17:13:10
另请参见[你如何确定什么SQL表以编程方式具有标识列](http://stackoverflow.com/q/87747) – 2016-06-10 08:47:54