c# - 在哪里可以验证 SQL 键类型代码?

标签 c# tsql sql-server-2017

基于 SQL Server Schema Collections我想使用 sqlConnection.GetSchema("IndexColumns"); 来确定哪些列是主键。

我做了一些实验,发现通过上面的请求,我得到了一个包含以下信息的数据表:

table_catalog   table_schema   table_name              column_name ordinal_position   KeyType   index_name
---------------------------------------------------------------------------------------------------------------------------
TestDb          dbo            TestTableWithPrimaryKey     Id              1             56      PK_TestTableWithPrimaryKey 

我猜 KeyType = 56 代表 primary-key 但这只能从这个表定义中推导出来:

CREATE TABLE [dbo].[TestTableWithPrimaryKey]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Foo] [nvarchar](50) NOT NULL,

    CONSTRAINT [PK_TestTableWithPrimaryKey] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]

在我实际将其用于任何项目之前,我想验证我的发现是否正确。有什么地方可以获得所有 key 类型吗?

最佳答案

KeyType 列似乎映射到由 SQL Server sys.types 目录 View system_type 列枚举的列数据类型(值56 是 int)。因此,这无助于将该列标识为主键的成员。

有多种方法可以获取 SQL Server 主键列,包括 SMO 和目录 View 查询。下面是一个获取 SQL Server 数据库中所有主键列的示例。如果您需要支持多个 DBMS 产品,您可以为实现这些 ANSI 标准 View 的 DBMS 产品使用 INFORMATION_SCHEMA 目录 View 。

SELECT 
      OBJECT_SCHEMA_NAME(i.object_id) AS SchemaName
    , OBJECT_NAME(i.object_id) AS TableName
    , c.name AS ColumnName
    , ic.key_ordinal AS KeyOrdinal
FROM sys.key_constraints AS kc
JOIN sys.indexes AS i ON i.object_id = kc.parent_object_id AND kc.name = i.name
JOIN sys.index_columns AS ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE kc.type_desc = N'PRIMARY_KEY_CONSTRAINT'
ORDER BY
      SchemaName
    , TableName
    , KeyOrdinal;

关于c# - 在哪里可以验证 SQL 键类型代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960230/

相关文章:

C# 从某个索引递归列表

sql - 在 SQL Server 中按用户获取表中的第一个和最后一个条目

sql - 为什么 SQL 查询返回重复项?

sql - SELECT FOR JSON 输出 float 指数

具有相同条件的 SELECT 和 UPDATE 查询中的 SQL Server 不匹配行数

c# - C#中并发安全自定义数据类型的实现

c# - 精确值匹配索引

c# - Linq - 每个组的最高值

SQL Server 对多个表的嵌套查询

installation - 新的 SQL Server 安装 - 试图执行未经授权的操作