作者:最美的你 | 来源:互联网 | 2023-05-18 18:06
懒人的懒做法班门弄斧一下--创建一个处理名称的函数--将数据库中字段名为news_type_xx格式的转换为实体名为NewsTypeXxxIFOBJECT_ID(f_spl
懒人的懒做法
班门弄斧一下
--创建一个处理名称的函数
--将数据库中字段名为 news_type_xx 格式的转换为 实体名为 NewsTypeXxx
IF OBJECT_ID('f_split')IS NOT NULL
DROP FUNCTION dbo.f_split
GO
CREATE FUNCTION f_split(@s VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @str VARCHAR(1000),@split VARCHAR(100)
SELECT @s=@s+'_',@str=''
WHILE CHARINDEX('_',@s)>0
BEGIN
SET @split=left(@s,CHARINDEX('_',@s))
SET @str=@str+UPPER(left(@split,1))+right(@split,LEN(@split)-1)
SET @s=STUFF(@s,1,CHARINDEX('_',@s),'')
END
RETURN REPLACE(LEFT(@str,LEN(@str)-1),'_','')
END
GO
--创建存储过程
IF OBJECT_ID('c#','p')IS NOT NULL
DROP PROC c#
GO
CREATE PROC c#(@ VARCHAR(100))
AS
DECLARE @i INT,@j INT, @a VARCHAR(20), @s VARCHAR(8000),@g VARCHAR(30)
DECLARE @t TABLE(id INT,[name] VARCHAR(100),[type] VARCHAR(20),[value] VARCHAR(200))
SET @i=1
SET @a='/// '
SET @g=' { get; set; }'
SET @s=@a+CHAR(10)+'/// '
INSERT INTO @t
SELECT id=ROW_NUMBER() OVER(ORDER BY c.[name]),
CAST(c.[name] AS VARCHAR(100)) AS [name] ,
CAST(t.[name] AS VARCHAR(30)) AS [type] ,
CAST(ISNULL(e.[value],'') AS VARCHAR(200)) AS [value]--字段说明
FROM SYS.COLUMNS c
LEFT JOIN SYS.TYPES t
ON c.user_type_id=t.user_type_id
LEFT JOIN SYS.EXTENDED_PROPERTIES e
ON e.class=1 AND c.[object_id]=e.major_id AND c.column_id=e.minor_id
WHERE c.[object_id]= OBJECT_ID(''+@+'')
SELECT @j=MAX(id) FROM @t
WHILE @i<=@j
BEGIN
SELECT @s=@s + [value] FROM @t WHERE id=@i
SET @s=@s+CHAR(10)+@a+CHAR(10)
SELECT @s=@s+'public'+CHAR(32)+CASE [type] WHEN 'datetime' THEN 'DateTime'
WHEN 'varchar' THEN 'String'
WHEN 'int' THEN 'Int32'
WHEN 'bit' THEN 'Boolean'
ELSE 'String' END--常用的几个数据类型,根据需要可扩充
+CHAR(32) FROM @t WHERE id=@i
SELECT @s=@s+ dbo.F_split([name]) --调用函数
FROM @t WHERE id=@i
SET @s=@s+@g+CHAR(10)+CHAR(10)
SET @s=@s+@a+CHAR(10)++'/// '
SET @i=@i+1
END
print @S
GO
--测试
EXEC C# 'moa_news'
--结果
///
/// 是否提醒1为提醒,0为不提醒,默认0
///
public Boolean IsRemind { get; set; }
///
/// 是否置顶1为置顶,0为不置顶,默认0
///
public Boolean IsTop { get; set; }
///
/// 是否可见1为可见0为不可见,默认可见
///
public Boolean IsVisible { get; set; }
///
/// 新闻发布人
///
public String NewsAuthor { get; set; }
///
/// 新闻内容
///
public String NewsContent { get; set; }
///
/// 新闻发布时间
///
public DateTime NewsCreateDate { get; set; }
///
/// 附件地址
///
public String NewsEnclosurePath { get; set; }
///
/// 附件名称
///
public String NewsEnclosureTitle { get; set; }
///
/// 新闻生效时间
///
public DateTime NewsFromDate { get; set; }
///
/// 新闻编号
///
public Int32 NewsId { get; set; }
///
/// 可阅读该新闻的机构列表,以“,”分隔
///
public String NewsOrganiztionList { get; set; }
///
/// 可阅读该新闻的角色列表,以“,”分隔
///
public String NewsRoleList { get; set; }
///
/// 新闻标题
///
public String NewsTitle { get; set; }
///
/// 新闻失效时间
///
public DateTime NewsToDate { get; set; }
///
///
///
public Int32 NewsType { get; set; }
///
/// 可阅读该新闻的人员列表,以“,”分隔
///
public String NewsUserList { get; set; }
11 个解决方案
为什么不用codesmith或者其它代码生成器,或者自己写一个代码生成器都比你这个要简单?
不知道你这样写有什么优势?
反正自己习惯用就可以了,不过还是觉得CodeSmith,或者用应用程序来生成会更好一点