SQL-如何检查给定的列是否为主键

时间:2019-11-26 22:47:16

标签: sql sql-server sql-function

我当前正在编写一个小的sql函数来扫描表并将表的列转换为ASP.NET模型。到目前为止,它的运行情况还不错,但是我需要检查当前列是否是带有CASE WHEN的主键才能提供输出。

这是我目前所拥有的,但是不起作用。

SELECT @result = @result + CHAR(13)
    + '//---' + ColumnName + '---' + CHAR(13)
    + ' [Display(Name = "' + dbo.Split_On_Upper_Case(ColumnName) + '")] ' + CHAR(13)
    + CASE SYS.INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE
        WHEN 'PRIMARY KEY' THEN 'Testing things and stuff' END
    + CASE bRequired WHEN 'NO' 
    THEN 
    CASE WHEN Len(MaxLen) > 0 THEN ' [Required, StringLength(' + MaxLen + ')]' + CHAR(13) ELSE ' [Required] ' + CHAR(13)  END   
    ELSE
    CASE WHEN Len(MaxLen) > 0 THEN ' [StringLength(' + MaxLen + ')]' + CHAR(13) ELSE '' END  
    END
    + ' public ' + ColumnType + ' ' + ColumnName + ' { get; set; } ' + CHAR(13) 
FROM
(
    SELECT  c.COLUMN_NAME AS ColumnName 

这有可能吗?

1 个答案:

答案 0 :(得分:1)

此查询返回当前数据库中所有表的主键:

SELECT SCHEMA_NAME(ta.schema_id) SchemaName,
       ta.name TableName,
       SCHEMA_NAME(ta.schema_id) + '.' + ta.name FullName,
       ind.name PrimaryKeyName,
       col.name ColumnName,
       indcol.key_ordinal Ordinal
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;
相关问题