我当前正在编写一个小的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
这有可能吗?
答案 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;