使用TSQL确定表的主键
我想确定使用TSQL的表的主键(存储过程或系统表是好的)。 SQL Server(2005或2008)中是否有这样的机制?
这应该让你开始:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON tc.CONSTRAINT_NAME = ccu.Constraint_name WHERE tc.CONSTRAINT_TYPE = 'Primary Key'
怎么样
sp_pkeys 'TableName'
SELECT ccu.COLUMN_NAME, ccu.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME WHERE tc.TABLE_CATALOG = 'Your_Catalog' -- replace with your catalog AND tc.TABLE_SCHEMA = 'dbo' -- replace with your schema AND tc.TABLE_NAME = 'Your_Table' -- replace with your table name AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
这里是基于SQL 2005的系统表(99%肯定会在2008年工作)。 这将列出所有用户定义表的所有PK,所有列和一些额外的绒毛可以被删除。 添加参数来一次挑出一个表格。
SELECT schema_name(ta.schema_id) SchemaName ,ta.name TableName ,ind.name ,indcol.key_ordinal Ord ,col.name ColumnName ,ind.type_desc ,ind.fill_factor from sys.tables ta inner join sys.indexes ind on ind.object_id = ta.object_id inner join sys.index_columns indcol on indcol.object_id = ta.object_id and indcol.index_id = ind.index_id inner join sys.columns col on col.object_id = ta.object_id and col.column_id = indcol.column_id where ind.is_primary_key = 1 order by ta.name ,indcol.key_ordinal
EXEC sp_Pkeys @tableName
exec [sys].[sp_primary_keys_rowset] @table_name= 'TableName'
最简单的方法就是这个!
select object_id from sys.objects where parent_object_id = OBJECT_ID(N'FACounty') and [type] = N'PK'
您最好使用INFORMATION_SCHEMA.KEY_COLUMN_USAGE,因为您可以访问非常重要的密钥sorting信息(ORDINAL_POSITION)。
SELECT kcu.* FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON tc.TABLE_NAME = kcu.TABLE_NAME AND tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME ORDER BY tc.TABLE_NAME ,tc.CONSTRAINT_NAME ,kcu.ORDINAL_POSITION
如果您已经知道您感兴趣的密钥的名称,请执行以下操作:
-- Assuming you have schema "Example" and the primary key name is "PK_Item" -- Notice that name of table is irrelevant here but is "Foobar" here IF (OBJECT_ID('Example.PK_ITEM') IS NULL) BEGIN ALTER TABLE [Example].Foobar ADD CONSTRAINT PK_Item PRIMARY KEY ... END