--modified from SO: http://stackoverflow.com/questions/5873170/generate-class-from-database-table --added table and column declare @TableName sysname = 'TableName' declare @Result varchar(max) = '[Table(Name = "' + @TableName + '")] public class ' + @TableName + ' {' select @Result = @Result + ' [Column(DbType = "' + Case when ColumnDbType in ('nvarchar', 'nchar', 'varchar', 'char', 'datetime2', 'binary', 'datetimeoffset', 'time', 'varbinary') then ColumnDbType + '(' + cMlength + ')' when ColumnDbType in ('decimal', 'numeric') then ColumnDbType + '(' + cPrecision + ',' + cScale +')' else ColumnDbType end + '", ' + case ISPK when 'true' then 'IsPrimaryKey = true' else 'CanBeNull = ' + cNullable end +')] public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; } ' from ( select distinct replace(col.name, ' ', '_') ColumnName, column_id ColumnId, typ.name ColumnDbType, convert(varchar, col.precision) cPrecision, convert(varchar, col.scale) cScale, convert(varchar, col.max_length) cMlength, case col.is_nullable when 1 then 'true' else 'false' end cNullable, pkk.ISPK, 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 'double' when 'image' then 'byte[]' when 'int' then 'int' when 'money' then 'decimal' when 'nchar' then 'string' when 'ntext' then 'string' when 'numeric' then 'decimal' when 'nvarchar' then 'string' when 'real' then 'float' when 'smalldatetime' then 'DateTime' when 'smallint' then 'short' when 'smallmoney' then 'decimal' when 'text' then 'string' when 'time' then 'TimeSpan' when 'timestamp' then 'long' 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 left join ( SELECT c.name AS 'ColumnName', CASE WHEN dd.pk IS NULL THEN 'false' ELSE 'true' END ISPK FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id LEFT JOIN (SELECT K.COLUMN_NAME , C.CONSTRAINT_TYPE as pk FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C ON K.TABLE_NAME = C.TABLE_NAME AND K.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND K.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG AND K.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA WHERE K.TABLE_NAME = @TableName) as dd ON dd.COLUMN_NAME = c.name WHERE t.name = @TableName ) pkk on ColumnName=col.name where object_id = object_id(@TableName) ) t order by ColumnId set @Result = @Result + ' }' print @Result