ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sqlserver中利用存储过程打印出指定表的实体类

2021-10-17 10:06:10  阅读:163  来源: 互联网

标签:存储 SET END dataType sqlserver BEGIN CHARINDEX 实体类 columnMapDataType


CREATE PROC [dbo].[sp_createEntity]
    @tableName NVARCHAR(128)
AS
    DECLARE @tableID INT;
    DECLARE @columnName NVARCHAR(64);
    DECLARE @dataType NVARCHAR(64);
    DECLARE @isNullable BIT;
	DECLARE @columnDesc NVARCHAR(256) = '';
    DECLARE @columnMapDataType NVARCHAR(64)= '';
    DECLARE @tempAttribute NVARCHAR(256)= '';
	DECLARE @tempAttributeSummary NVARCHAR(1024)= '';

	set @tableName=replace ( @tableName , '[' , '' )
	set @tableName=replace ( @tableName , ']' , '' )

    SET @tableID = -1;
    SELECT  @tableID = object_id ,
            @tableName = name
    FROM    sys.tables
    WHERE   LOWER(name) = LOWER(@tableName);
    IF ( @tableID = -1 )
        BEGIN
            PRINT ( '输入的表名不存在!' );
        END;

    DECLARE curtable CURSOR
    FOR
        SELECT  CONVERT(NVARCHAR(50), A.name) AS columnName ,
                CONVERT(NVARCHAR(50), LOWER(B.name)) AS dataType ,
                A.is_nullable AS isNullable,
				CONVERT(NVARCHAR(256), C.value) AS columnDesc
        FROM    sys.columns AS A
                LEFT JOIN sys.types AS B ON A.user_type_id = B.user_type_id
				LEFT JOIN sys.extended_properties AS C ON A.object_id = C.major_id AND A.column_id = C.minor_id 
        WHERE   A.object_id = @tableID;
    OPEN curtable;
    FETCH NEXT FROM curtable INTO @columnName, @dataType, @isNullable, @columnDesc;
    WHILE @@FETCH_STATUS = 0
        BEGIN
            IF ( CHARINDEX(@dataType, 'datetime,smalldatetime') > 0 )
                BEGIN
                    SET @columnMapDataType = 'DateTime';
                END;
            IF ( CHARINDEX(@dataType, 'bigint') > 0 )
                BEGIN
                    SET @columnMapDataType = 'long';
                END;
            IF ( CHARINDEX(@dataType, 'tinyint') > 0 )
                BEGIN
                    SET @columnMapDataType = 'byte';
                END;
            IF ( CHARINDEX(@dataType, 'int') = 1 )
                BEGIN
                    SET @columnMapDataType = 'int';
                END;
			IF ( CHARINDEX(@dataType, 'smallint') = 1 )
               BEGIN
                   SET @columnMapDataType = 'short';
               END;
            IF ( CHARINDEX(@dataType, 'float,real') > 0 )
                BEGIN
                    SET @columnMapDataType = 'float';
                END;
            IF ( CHARINDEX(@dataType, 'binary,varbinary,image,timestamp') > 0 )
                BEGIN
                    SET @columnMapDataType = 'byte[]';
                END;
            IF ( CHARINDEX(@dataType, 'bit') > 0 )
                BEGIN
                    SET @columnMapDataType = 'bool';
                END;
            IF ( CHARINDEX(@dataType, 'decimal,smallmoney,money,numeric') > 0 )
                BEGIN
                    SET @columnMapDataType = 'decimal';
                END;
            IF ( CHARINDEX(@dataType, 'uniqueidentifier') > 0 )
                BEGIN
                    SET @columnMapDataType = 'Guid';
                END;
            IF ( CHARINDEX(@dataType, 'char,varchar,nchar,nvarchar,text,ntext') > 0 )
                BEGIN
                    SET @columnMapDataType = 'string';
                END;
            IF ( CHARINDEX(@dataType, 'xml') > 0 )
                BEGIN
                    SET @columnMapDataType = 'XmlDocument';
                END;
            IF ( @isNullable = 1
                 AND CHARINDEX(@columnMapDataType, 'string,XmlDocument') = 0
               )
                BEGIN
                    SET @columnMapDataType = @columnMapDataType + '?';
                END;
			
			SET @tempAttributeSummary = CHAR(10) + '/// <summary>' + CHAR(10) + '/// ' + @columnDesc + CHAR(10) + '/// </summary>';
            SET @tempAttribute = 'public ' + @columnMapDataType + ' '
                + @columnName + ' { get; set; }';
			
			PRINT @tempAttributeSummary;
            PRINT @tempAttribute;
            FETCH NEXT FROM curtable INTO @columnName, @dataType, @isNullable, @columnDesc;
        END;
    CLOSE curtable;
    DEALLOCATE curtable;
GO

测试:

exec sp_createEntity '表名'

 

标签:存储,SET,END,dataType,sqlserver,BEGIN,CHARINDEX,实体类,columnMapDataType
来源: https://blog.csdn.net/u013986317/article/details/120807753

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有