Skip to content

Instantly share code, notes, and snippets.

@Mds92
Last active April 10, 2022 19:24
Show Gist options
  • Save Mds92/9aba900dadc601d1268b0a8a72e3a763 to your computer and use it in GitHub Desktop.
Save Mds92/9aba900dadc601d1268b0a8a72e3a763 to your computer and use it in GitHub Desktop.
Sql Server Table To C# Class Includes Comment
USE [YourDataBaseName]
GO
/****** Object: StoredProcedure [dbo].[SqlTableToCSharpClass] Script Date: 4/10/2022 11:51:07 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Mohammad Dayyan
-- Create date: 2021-09-16
-- Description: تبدیل یک جدول به کلاس سی شارپ
-- =============================================
CREATE PROCEDURE [dbo].[SqlTableToCSharpClass]
@SqlTableName NVARCHAR(MAX),
@GenerateSummary BIT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TableName SYSNAME = @SqlTableName
DECLARE @Result NVARCHAR(MAX) =
CASE @GenerateSummary
WHEN 0 THEN N''
ELSE (SELECT TOP 1
CHAR(10) + '/// <summary>' +
CHAR(10) + '/// ' + REPLACE(
REPLACE(CAST(ep.[value] AS NVARCHAR(MAX)), CHAR(13) + CHAR(10), CHAR(10)),
CHAR(10),
CHAR(10) + '/// ') +
CHAR(10) + '/// </summary>' +
CHAR(10)
FROM sys.extended_properties AS ep
WHERE ep.[name] = 'MS_Description'
AND ep.major_id = OBJECT_ID(@SqlTableName)
AND ep.minor_id = 0)
END
SET @Result = @Result + 'public class ' + REPLACE(REPLACE(SUBSTRING(@SqlTableName, CHARINDEX('.', @SqlTableName) + 1, LEN(@SqlTableName)),'[', ''), ']', '') + CHAR(10) + '{'
SELECT @Result = @Result +
CASE @GenerateSummary
WHEN 0 THEN N''
ELSE (
CHAR(10) + CHAR(9) + '/// <summary>' +
CHAR(10) + CHAR(9) + '/// ' + REPLACE (
REPLACE(t.[Description], CHAR(13) + CHAR(10), CHAR(10)),
CHAR(10),
CHAR(10) + CHAR(9) + '/// ') +
CHAR(10) + CHAR(9) + '/// </summary>')
END +
CHAR(10) + CHAR(9) +
'public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }' + CHAR(10)
FROM (
SELECT REPLACE(col.[name], ' ', '_') ColumnName,
ColumnId = column_id,
[Description] =
CASE
WHEN sep.[value] IS NULL THEN ''
ELSE REPLACE(CAST(sep.[value] AS NVARCHAR(MAX)), CHAR(13) + CHAR(10), CHAR(10))
END,
ColumnType =
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,
NullableSign =
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 N''
END
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 sys.extended_properties sep ON col.[object_id] = sep.major_id
AND col.column_id = sep.minor_id
AND sep.[name] = 'MS_Description'
WHERE col.[object_id] = OBJECT_ID(@SqlTableName)
) t
ORDER BY t.ColumnId
SET @Result = @Result + CHAR(10) + '}'
SELECT @Result
END
GO
@Mds92
Copy link
Author

Mds92 commented Apr 10, 2022

Usage:

USE [YourDataBaseName]
GO

EXEC	[dbo].[SqlTableToCSharpClass]
		@SqlTableName = N'TableName',
		@GenerateSummary = 1

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