Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Generate C# class from database table
--from SO: http://stackoverflow.com/questions/5873170/generate-class-from-database-table
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
@thEpisode

This comment has been minimized.

Copy link

@thEpisode thEpisode commented Mar 3, 2017

Awesome! 😍

@shane-powell

This comment has been minimized.

Copy link

@shane-powell shane-powell commented May 10, 2017

Great time saver! Thanks! I have forked it to create a class implementing INotifyPropertyChanged.

@rvivekit

This comment has been minimized.

Copy link

@rvivekit rvivekit commented Nov 1, 2017

You're the BOSS

@livetechng

This comment has been minimized.

Copy link

@livetechng livetechng commented Nov 3, 2017

Nice... Works like charm!

@ucandoit1010

This comment has been minimized.

Copy link

@ucandoit1010 ucandoit1010 commented Jan 12, 2018

what is the license ?

@Payam7682

This comment has been minimized.

Copy link

@Payam7682 Payam7682 commented Jun 11, 2018

It's great.

@alexmartinezm

This comment has been minimized.

Copy link

@alexmartinezm alexmartinezm commented Aug 5, 2020

Awesome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment