读书人

判断指定table的指定列是不是是primar

发布时间: 2013-01-01 14:04:19 作者: rapoo

判断指定table的指定列是否是primary,是否是自增标示
大家好,
已知一个表叫table,其中有一个列叫column,我想用sql语句来判断:
1 column是否是主键
2 column是否是自增标识

谢谢~
[解决办法]
是否自增列:

select a.name,a.is_identity 
from sys.columns a inner join sys.objects b on a.object_id=b.object_id
where b.name='table' and a.name='column'

[解决办法]


2. select * from sys.identity_columns where object_id = object_id('Sales.SalesOrderDetail')

1. select COLUMN_NAME,* from INFORMATION_SCHEMA.TABLE_CONSTRAINTS A
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE B ON A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
WHERE A.CONSTRAINT_TYPE = 'PRIMARY KEY' AND A.TABLE_NAME = 'SalesOrderDetail'




[解决办法]
是否主键:
select a.name,c.is_primary_key 
from sys.columns a inner join sys.index_columns b on a.object_id=b.object_id and a.column_id=b.column_id
inner join sys.indexes c on a.object_id=c.object_id where a.object_id=object_id('table') and a.name='column'

以上,为1即是.0或无记录即不是.
[解决办法]
自增列:

if columnproperty(object_id('tableName'),'columnName','IsIdentity')=1
select '自增列'
else
select '不是自增列'


主键:
select count(*) from [sysobjects] where xtype = 'pk 'and parent_obj in (select [id] from [sysobjects] where [name] = 'tableName')
这将能够判断表是否包含主键

此外,一个表中一般只有一个是自增列,通常为主键,但这依然不能确定哪个是主键

还是给我们一个前提条件吧,就是说主键一定是第一个字段,那么我们就可以得到主键的字段名了:
select name
from syscolumns
where [id] in (select [id] from [sysobjects] where [name] = 'tabelName') and colorder=1

所以解决的方案就是设计的时候主键一定要放在第一位,然后先判断主键存在不存在,然后在取第一column名。

至于如果判断是否为主键,那就可以这样来,(colorder=1 and Exists(主键))。



读书人网 >SQL Server

热点推荐