如何识别表是否有标识列

时间:2010-05-20 07:18:03

标签: sql sql-server sql-server-ce

我想知道表是否有标识列。表格不为我所知。我还没有完成表格的结构。使用查询?

我使用的是Sql Server Compact Edition。

12 个答案:

答案 0 :(得分:18)

这是返回标识列名称的查询;

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()。如果条件值为true(1),则表格具有标识列(如果已设置)。如果没有,则它没有标识列。

答案 1 :(得分:11)

很久以前我就知道了,但我觉得这很有帮助

试试这个:

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

答案 2 :(得分:7)

以下任何查询都可用于检查表格中是否存在标识列

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

答案 3 :(得分:7)

IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 
从pql server 2008开始,

ObjectProperty可用参考: OBJECTPROPERTY

答案 4 :(得分:4)

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

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

答案 5 :(得分:3)

执行此操作的一种方法是使用存储过程sp_help。即:

sp_help MyTable

这将返回一个DataSet,其中包含您在表中需要的所有信息。有一个特定的表,其中包含有关身份的信息。

I.e:

如果它不包含标识字段,则标识列将显示:“未定义标识列”。

答案 6 :(得分:3)

@Pranay:他说Compact Edition。不支持存储过程,也没有sys.anything。

这是电话:

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

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

答案 7 :(得分:1)

这个查询获取所有表名称,表的列名,并且在所选数据库中是否为身份

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

答案 8 :(得分:1)

... 声明@tblhasIdentCol位= IF(IDENT_CURRENT(@dbName +'。'+ @schemaName +'。'+ @tableName)IS NOT NULL,1,0)

如果表具有标识,您将获得数值

答案 9 :(得分:0)

如果当前表具有标识列,则可以使用1或0 布尔值表单

SELECT Count(Column_ID) FROM sys.identity_columns WHERE OBJECT_NAME(object_id) = 'tableName'

答案 10 :(得分:0)

CREATE FUNCTION dbo.fnTableHasIdentity(@Tbl sysname)
RETURNS TINYINT
BEGIN 
  RETURN OBJECTPROPERTY(OBJECT_ID(@Tbl), 'TableHasIdentity')
END 

-就这么简单!

答案 11 :(得分:0)

select t.name as TableName,c.name as ColumnName
from sys.identity_columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = 'TableName'