select column_name, table_name,CONSTRAINT_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where table_name = 'tbl_vote' and CONSTRAINT_NAME like 'PK_%' 其中pk_开头表示是主键约束。
binriyue(日月) 的方法只适用于sql server啊,access和mysql呢?
select column_name, table_name,CONSTRAINT_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where table_name = 'tbl_vote' and CONSTRAINT_NAME like 'PK_%
procedure GetPrimaryKeys(const Connection: TADOConnection;const TableName: String; List: TStrings); const COLUMN_NAME = 'COLUMN_NAME'; { Do not localize } var Fields: _Recordset; begin if Connection.Connected = False then Exit; Fields := Connection.ConnectionObject.OpenSchema(adSchemaPrimaryKeys, VarArrayOf([Null, Null, TableName]), EmptyParam); with List do begin BeginUpdate; try Clear; while not Fields.EOF do begin Add(VarToStr(Fields.Fields[COLUMN_NAME].Value)); Fields.MoveNext; end; finally EndUpdate; end; end; end;
返回当前环境中单个表的主键信息。语法
sp_pkeys [ @table_name = ] 'name'
[ , [ @table_owner = ] 'owner' ]
[ , [ @table_qualifier = ] 'qualifier' ]参数
[@table_name =] 'name'是要返回其信息的表。name 为 sysname 类型,无默认值。不支持通配符模式匹配。[@table_owner =] 'owner'表示指定表的所有者。owner 为 sysname 类型,其默认值为 NULL。不支持通配符模式匹配。如果未指定 owner,则应用基础 DBMS 的默认表可视性规则。在 Microsoft® SQL Server™ 中,如果当前用户拥有的表具有指定名称,则返回该表的列。如果未指定 owner,且当前用户未拥有指定 name 的表,则该过程查找由数据库所有者拥有的具有指定 name 的表。如果有,则返回该表的列。[@table_qualifier =] 'qualifier'是表限定符。qualifier 为 sysname 类型,其默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,该列表示数据库名。在某些产品中,该列表示表所在数据库环境的服务器名。返回代码值
无结果集
列名 数据类型 描述
TABLE_QUALIFIER sysname 表限定符的名称。该字段可以为 NULL。
TABLE_OWNER sysname 表所有者的名称。该字段始终返回值。
TABLE_NAME sysname 表的名称。在 SQL Server 中,此列表示在 sysobjects 表中的列出的表名。该字段始终返回值。
COLUMN_NAME sysname 是所返回的 TABLE_NAME 中每一列的列名。在 SQL Server 中,此列表示在 syscolumns 表中列出的列名。该字段始终返回值。
KEY_SEQ smallint 多列主键中列的序列号。
PK_NAME sysname 主键标识符。如果对数据源不适用,则返回 NULL。
注释
sp_pkeys 返回显式定义了 PRIMARY KEY 约束的列的信息。由于不是所有的系统均支持显式命名的主键,因此由网关实现者决定主键的构成。要注意主键这一术语指的是表的逻辑主键。应在被列为逻辑主键的每个键上定义一个唯一索引。此唯一索引也会由 sp_statistics 返回。存储过程 sp_pkeys 与 ODBC 中的 SQLPrimaryKeys 等价。返回的结果按 TABLE_QUALIFIER、TABLE_OWNER、TABLE_NAME 和 KEY_SEQ 排序。
其中pk_开头表示是主键约束。
procedure GetPrimaryKeys(const Connection: TADOConnection;const TableName: String; List: TStrings);
const
COLUMN_NAME = 'COLUMN_NAME'; { Do not localize }
var
Fields: _Recordset;
begin
if Connection.Connected = False then Exit;
Fields := Connection.ConnectionObject.OpenSchema(adSchemaPrimaryKeys, VarArrayOf([Null, Null, TableName]),
EmptyParam);
with List do
begin
BeginUpdate;
try
Clear;
while not Fields.EOF do
begin
Add(VarToStr(Fields.Fields[COLUMN_NAME].Value));
Fields.MoveNext;
end;
finally
EndUpdate;
end;
end;
end;