1

我知道获取数据库表名的查询是:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE'

如果表的主键由多列组成,如何获取表?或者获取特定表的复合主键?

4

2 回答 2

1

如果我理解得很好,您可以使用 TSQL 进行一些选择。

程序:

exec sp_pkeys 'table', 'schema'

看法:

此查询也将返回具有唯一约束 e foreign_keys 的相关数据

select * from information_schema.key_column_usage
where table_schema = 'schema' and table_name = 'table'

如果您只想获取与主键相关的列,您可以尝试以下类似的操作。我认为它可以随着数据库版本而改变,我现在不确定。

select * 
  from information_schema.key_column_usage as k
 where table_schema = 'schema' and table_name = 'table'
   and constraint_name = (
    select name 
      from sysobjects as u
     where k.table_name = object_name(u.parent_obj)
       and u.xtype = 'PK')
  order by table_schema, table_name, ordinal_position

如果不是答案,请给我们更多细节。

于 2013-08-31T17:06:40.303 回答
0

尝试这个:

sp_helpindex 'YourTable'
于 2013-08-31T16:50:42.393 回答