我们如何以编程方式确定哪些SQL表具有标识列

时间:2020-03-05 19:00:04  来源:igfitidea点击:

我想在SQL Server 2005中创建一个列列表,这些列在T-SQL中具有标识列及其对应的表。

结果将是这样的:

TableName,ColumnName

解决方案

回答

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

回答

在SQL 2005中:

select object_name(object_id), name
from sys.columns
where is_identity = 1

回答

我认为这适用于SQL 2000:

SELECT 
    CASE WHEN C.autoval IS NOT NULL THEN
        'Identity'
    ELSE
        'Not Identity'
    AND
FROM
    sysobjects O
INNER JOIN
    syscolumns C
ON
    O.id = C.id
WHERE
    O.NAME = @TableName
AND
    C.NAME = @ColumnName

回答

此查询似乎可以解决问题:

SELECT 
    sys.objects.name AS table_name, 
    sys.columns.name AS column_name
FROM sys.columns JOIN sys.objects 
    ON sys.columns.object_id=sys.objects.object_id
WHERE 
    sys.columns.is_identity=1
    AND
    sys.objects.type in (N'U')

回答

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

IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'table_name_here'), 'TableHasIdentity')) = 1)
    PRINT 'Yes'
ELSE
    PRINT 'No'

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

回答

对于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