Tsql 从类中视图的表名创建获取集属性

Tsql 从类中视图的表名创建获取集属性,tsql,fetch,Tsql,Fetch,下面的代码是T-SQL中的一个快速脚本,用于构建Get-Set属性以在类中使用: DECLARE @COLUMN_NAME varchar(250) DECLARE @DATA_TYPE varchar(250) DECLARE c1 CURSOR FOR select COLUMN_NAME, DATA_TYPE from information_schema.columns where table_name = 'Members' OPEN c1 FETCH NEXT FROM c1 IN

下面的代码是T-SQL中的一个快速脚本,用于构建Get-Set属性以在类中使用:

DECLARE @COLUMN_NAME varchar(250)
DECLARE @DATA_TYPE varchar(250)
DECLARE c1 CURSOR FOR

select COLUMN_NAME, DATA_TYPE from information_schema.columns
where table_name = 'Members'
OPEN c1
FETCH NEXT FROM c1 INTO @COLUMN_NAME, @DATA_TYPE
WHILE @@FETCH_STATUS = 0
BEGIN

IF @DATA_TYPE = 'nvarchar'
BEGIN
    SET @DATA_TYPE = 'string'
END

IF @DATA_TYPE = 'ntext'
BEGIN
    SET @DATA_TYPE = 'string'
END

IF @DATA_TYPE = 'datetime'
BEGIN
    SET @DATA_TYPE = 'DateTime'
END


PRINT 'public ' + @DATA_TYPE + ' ' + @COLUMN_NAME + ' { get; set; }'

FETCH NEXT FROM c1 INTO @COLUMN_NAME, @DATA_TYPE

END
CLOSE c1
DEALLOCATE c1
GO
如果你可以添加或清理它,这将是伟大的

更新 下面的代码正在运行,我做了一些轻微的修改

DECLARE @Script NVARCHAR(MAX) = ''

SELECT @Script = @Script + '
public ' + CASE WHEN DATA_TYPE IN ('nvarchar','ntext') THEN 'string' 
                WHEN DATA_TYPE = 'datetime' THEN 'DateTime' 
                ELSE DATA_TYPE
            END 
                        + ' ' 
                        + upper(substring(COLUMN_NAME,1,1))+
                        + lower(substring(COLUMN_NAME,2,499))   
                        + ' { get; set; }'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SubCategory'

PRINT @Script

如果它能满足你的需要。。。停止修补;p如果您需要反馈:

  • 不需要那个光标;基于集合的
    SELECT
    就足够了;每当你发现自己在写光标时,它可能是错的
  • 要么连接到映射表(SQL类型和C类型之间),要么使用
    CASE….
    选择内联
  • 你可能想对保留字产生偏执,例如
    public
    ——在C#中,你需要使用
    @public
    (或避免使用)
  • 您可能希望删除空格;您可以调用db列
    [带空格的东西]
    ,但在C#中这不起作用
  • 您可以检查扩展元数据中的
    MS_Description
    值,并将其写入
    //…
    [说明(@“…)]

您可以使用

DECLARE @Script NVARCHAR(MAX) = ''

SELECT @Script = @Script + '
public ' + CASE WHEN DATA_TYPE IN ('nvarchar','ntext') THEN 'string' 
                WHEN DATA_TYPE = 'datetime' THEN 'DateTime' 
                ELSE DATA_TYPE
            END 
                        + ' ' + COLUMN_NAME + ' { get; set; }'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Members'

PRINT @Script

美好的我太懒了,没有启动SSM来做这件事;p和+1特别适用于固定信息模式表上的大小写-否则在区分大小写模式下会很痛苦。喜欢它!这是一段干净的代码,易于理解。干得好!
declare @TableName sysname = 'Members'
declare @result varchar(max) = ''

select @result = @result + '
public ' + ColumnType + ' ' + ColumnName + ' { get; set; }
'
from
(
    select replace(col.name, ' ', '_') ColumnName, 
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'char'
            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'
        end ColumnType
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id
    where object_id = object_id(@TableName)
) t

print @result