SQL - 如何检查给定列是否为主键
SQL - How to check if a given column is a primary key
我目前正在编写一个小的 sql 函数来扫描 table 并将 table 的列转换为 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
这可能吗?
本次查询returns当前数据库所有表的主键:
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;
我目前正在编写一个小的 sql 函数来扫描 table 并将 table 的列转换为 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
这可能吗?
本次查询returns当前数据库所有表的主键:
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;