2010-01-07 62 views
0

我需要一个表的主键的名称和主键列名,请告诉我,我应该写什么查询..请告诉我如何在SQL Server,获取主键名2005

+0

我假定您正在开发某种通用数据库实用程序;否则你应该**知道**这个信息已经。我会写一个查询系统表sysobects和sysindexes来获取这些信息。但是,我知道MS在SQL Server的更高版本中提供了有用的元数据视图;你会更好地使用这些。 – 2010-01-07 08:05:01

+0

你的问题的结果是,你期望主键只能引用一列 - 这远远不是真的。当然,不是每个桌子都有一个PK – MartW 2010-01-07 09:09:35

回答

2
declare @tableName as nvarchar(100) 
set @tableName = 'table' 

select i.name, c.name 
from sys.index_columns ic 
    join sys.indexes i on ic.index_id=i.index_id 
    join sys.columns c on c.column_id=ic.column_id 
where 
    i.[object_id] = object_id(@tableName) and 
    ic.[object_id] = object_id(@tableName) and 
    c.[object_id] = object_id(@tableName) and 
    is_primary_key = 1 
+0

为什么只有100个? Sysname可以是128. – MartW 2010-01-07 09:11:55

+0

没有理由,真的。我只用了一个偶数。 – 2010-01-07 09:24:09

+0

@Jonas:128也是,:-) – 2010-01-07 09:58:26

1

下面是一个使用INFORMATION_SCHEMA视图的另一种选择

SELECT 
    cu.Table_Catalog, 
    cu.Table_Schema, 
    cu.table_name, 
    cu.Constraint_name , 
    cu.column_name 

FROM 
    sys.indexes si 
    inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu 
    on si.name = cu.constraint_name 
WHERE 
    is_primary_key = 1 
+0

+1这是比数据库特定的sys表更好。 (@soslo:它可以有多慢?:) – 2010-07-09 11:57:02

0

只是一个性能说明 - 使用sys表的选择速度比使用INFORMATION_SCHEMA视图的select快几个数量级