sha*_*mim 7 c# ado.net stored-procedures sql-server-2000 database-schema
我有一些ADO.NET代码来动态检测数据库模式,我需要的是如何使用该GetSchema方法获取唯一列约束和主键约束SqlConnection.这是我的代码:
conn.Open();
SqlCommand mSqlCommand = new SqlCommand("sp_pkeys", conn);
mSqlCommand.CommandType = CommandType.StoredProcedure;
mSqlCommand.Parameters.Add(
"@table_name", SqlDbType.NVarChar).Value = tableName;
SqlDataReader mReader = mSqlCommand.ExecuteReader(
(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly));
//ExecuteReader();
DataTable schema = mReader.GetSchemaTable();
mReader.Close();
conn.Close();
Run Code Online (Sandbox Code Playgroud)
没有什么在调用GetSchemaTable上SqlConnection,这将让你摸不着头脑.
您似乎可以使用IsKey列值,对于有助于唯一标识表中记录的任何内容,该值应返回true.但是,从IsKey列的文档(强调我的):
true:该列是行集中的一组列之一,它们一起唯一标识该行.IsKey设置为true的列集必须唯一标识行集中的行.不要求这组列是最小的列集.可以从基表主键,唯一约束或唯一索引生成该组列.
因此,您不能保证它对主键本身有贡献.
现在,如果您需要的是唯一标识行的东西,那么IsKey就可以了,因为主键并不总是唯一标识行的方式(例如,您可以使用具有唯一索引的自然标识符).即使您具有主键和包含其他列的唯一索引,组合中所有这些列的值也将始终是唯一的.
但是,如果您特别需要查看构成主键的列,则GetSchemaTable不会向您提供所需的信息.相反,您可以只调用sp_pkeys系统存储过程来查找有助于创建主键的列的名称.
| 归档时间: |
|
| 查看次数: |
11662 次 |
| 最近记录: |