Last active
April 10, 2022 19:24
-
-
Save Mds92/9aba900dadc601d1268b0a8a72e3a763 to your computer and use it in GitHub Desktop.
Sql Server Table To C# Class Includes Comment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage: