欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用SQL生成模型实体类

程序员文章站 2022-05-03 10:40:56
```sql declare @TableName sysname = 'TableName' declare @Result varchar(max) = 'public class ' + @TableName + ' {' select @Result = @Result + ' public... ......
declare @tablename sysname = 'tablename'
declare @result varchar(max) = 'public class ' + @tablename + '
{'

select @result = @result + '
    public ' + columntype + nullablesign + ' ' + columnname + ' { get; set; }
'
from
(
    select
        replace(col.name, ' ', '_') columnname,
        column_id columnid,
        case typ.name
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'datetime'
            when 'datetime' then 'datetime'
            when 'datetime2' then 'datetime'
            when 'datetimeoffset' then 'datetimeoffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'datetime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'timespan'
            when 'timestamp' then 'datetime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'unknown_' + typ.name
        end columntype,
        case
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier')
            then '?'
            else ''
        end nullablesign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id and col.user_type_id = typ.user_type_id
    where object_id = object_id(@tablename)
) t
order by columnid

set @result = @result  + '
}'

print @result