如何以编程方式确定SQL表具有标识列的内容

97 t-sql sql-server metadata identity-column

我想在SQL Server 2005中创建一个列列表,其中包含标识列及其在T-SQL中的相应表.

结果将是这样的:

TableName,ColumnName

小智 167

对SQL Server执行此操作的另一种可能方法是使用INFORMATION_SCHEMA视图,该方法对系统表(可能发生更改,版本更换)的依赖性较小:

select COLUMN_NAME, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
order by TABLE_NAME 
Run Code Online (Sandbox Code Playgroud)

  • 当你有其他模式时,这种方式更好:COLUMNPROPERTY(object_id(TABLE_SCHEMA +'.'+ TABLE_NAME)... (12认同)

Kev*_*ley 48

sys.columns.is_identity = 1

例如,

select o.name, c.name
from sys.objects o inner join sys.columns c on o.object_id = c.object_id
where c.is_identity = 1
Run Code Online (Sandbox Code Playgroud)

  • 注意:这在SQL 2008中适用于我,而接受的答案不适用(问题请求SQL 2005). (2认同)

小智 27

另一种方式(2000/2005/2012/2014):

IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'table_name_here'), 'TableHasIdentity')) = 1)
    PRINT 'Yes'
ELSE
    PRINT 'No'
Run Code Online (Sandbox Code Playgroud)

注意:table_name_here应该是schema.table,除非架构是dbo.

  • 最好和最短的方式.谢谢!(适用于sql 2012) (4认同)

Eur*_*lli 6

在SQL 2005中:

select object_name(object_id), name
from sys.columns
where is_identity = 1
Run Code Online (Sandbox Code Playgroud)