2010-01-07 24 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快幾個數量級