create procedure sys.sp_pkeys ( @table_name sysname, @table_owner sysname = null, @table_qualifier sysname = null ) as declare @table_id int -- quotename() returns up to 258 chars declare @full_table_name nvarchar(517) -- 258 + 1 + 258 if @table_qualifier is not null begin if db_name() <> @table_qualifier begin -- If qualifier doesn't match current database raiserror (15250, -1,-1) return end end if @table_owner is null begin -- If unqualified table name select @full_table_name = quotename(@table_name) end else begin -- Qualified table name if @table_owner = '' begin -- If empty owner name select @full_table_name = quotename(@table_owner) end else begin select @full_table_name = quotename(@table_owner) + '.' + quotename(@table_name) end end select @table_id = object_id(@full_table_name) select TABLE_QUALIFIER = convert(sysname,db_name()), TABLE_OWNER = convert(sysname,schema_name(o.schema_id)), TABLE_NAME = convert(sysname,o.name), COLUMN_NAME = convert(sysname,c.name), KEY_SEQ = (SELECT convert(smallint, index_column_id) FROM sys.index_columns WHERE object_id = @table_id AND index_id = i.index_id and column_id = c.column_id), PK_NAME = convert(sysname,k.name) from sys.indexes i, sys.all_columns c, sys.all_objects o, sys.key_constraints k where o.object_id = @table_id and o.object_id = c.object_id and o.object_id = i.object_id and k.parent_object_id = o.object_id and k.unique_index_id = i.index_id and i.is_primary_key = 1 and c.column_id IN (SELECT column_id FROM sys.index_columns WHERE object_id = @table_id AND index_id = i.index_id) order by 1, 2, 3, 5