如何确定一个列是不是是 MSSQL 2000 中的标识列?

Posted

技术标签:

【中文标题】如何确定一个列是不是是 MSSQL 2000 中的标识列?【英文标题】:How do I determine if a column is an identity column in MSSQL 2000?如何确定一个列是否是 MSSQL 2000 中的标识列? 【发布时间】:2010-09-16 09:09:00 【问题描述】:

我想在代码中执行此操作,而不是使用 ALT+F1。

【问题讨论】:

另见How to identify whether the table has identity column和How do you determine what SQL Tables have an identity column programatically 【参考方案1】:

你也可以这样做:

select columnproperty(object_id('mytable'),'mycolumn','IsIdentity')

如果是身份则返回 1,否则返回 0。

【讨论】:

万一你的表不在默认模式(dbo)中,你需要在表名中指定mySchema.myTable【参考方案2】:
sp_help tablename 

在输出中查找如下内容:

 Identity     Seed     Increment     Not For Replication    
 -----------  -------  ------------  ---------------------- 
 userid       15500    1             0        

【讨论】:

【参考方案3】:

调整WHERE 子句以适应:

select
    a.name as TableName,
    b.name as IdentityColumn
from
    sysobjects a inner join syscolumns b on a.id = b.id
where
    columnproperty(a.id, b.name, 'isIdentity') = 1
    and objectproperty(a.id, 'isTable') = 1

【讨论】:

【参考方案4】:

作为@Blogbeard 回答的扩展

如果你喜欢纯查询而不是内置函数

select col_name(sys.all_objects.object_id, column_id) as id from sys.identity_columns 
join sys.all_objects on sys.identity_columns.object_id = sys.all_objects.object_id
where sys.all_objects.name = 'system_files'

【讨论】:

【参考方案5】:

标识是用于加载到表中的第一行的值。

有一篇微软文章可以提供有关身份的良好知识:

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-2017

现在,有几种方法可以识别表中的哪一列是标识列:

我们可以使用sql查询:select columnproperty(object_id('mytable'),'mycolumn','IsIdentity') sp_help 表名

【讨论】:

以上是关于如何确定一个列是不是是 MSSQL 2000 中的标识列?的主要内容,如果未能解决你的问题,请参考以下文章

update的一个高级用法(mssql2000)

SQL2000行转列于列转行问题,急~~~ (部门是不确定几个的)

查询全列数据类型 MSSQL

如何从 SQL Server 2000 调用 MySQL 存储过程?

如何避免 MSSql 2000 中出现错误“已存在与此命令关联的打开 DataReader”

mssql 2000,以用户身份执行sql语句。