Skip to content

Instantly share code, notes, and snippets.

@ernado-x
Created September 9, 2015 08:13
Show Gist options
  • Save ernado-x/7b6f0d9f4acb95e949d5 to your computer and use it in GitHub Desktop.
Save ernado-x/7b6f0d9f4acb95e949d5 to your computer and use it in GitHub Desktop.
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
Copy link

Awesome! 😍

@shane-powell
Copy link

shane-powell commented May 10, 2017

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

@rvivekit
Copy link

rvivekit commented Nov 1, 2017

You're the BOSS

@livetechng
Copy link

Nice... Works like charm!

@ucandoit1010
Copy link

what is the license ?

@Payam7682
Copy link

It's great.

@alexmartinezm
Copy link

Awesome!

@kadiryilmaz
Copy link

old but gold.. thanks

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