自定义实体的代码自动生成


if ( object_id ( ' generatecode ' ))  is   not   null   drop   proc  generatecode
go
CREATE   proc  generatecode
    
@table   varchar ( 50 )
as

declare   @sqlstr   varchar ( 2000 )    
create   table  #tmp    
(    
    column_name 
varchar ( 20 ),    
    type_name 
varchar ( 20 ),    
    length  
varchar ( 10 )    
)    

create   table  # text (n_text  varchar ( 1000 ))

select   @sqlstr   = '       
insert into #tmp (column_name,type_name,length) select name,type_name,a.prec    
    from syscolumns a ,master.dbo.spt_datatype_info b    
    where id = object_id(N
''' + @table + '''
    and OBJECTPROPERTY(id, N
'' IsUserTable '' ) =1    
    and  a.xtype=b.ss_dtype 
    and  a.length = isnull(b.fixlen, a.length)    
    AND isnull(b.AUTO_INCREMENT,0) = isnull(ColumnProperty (a.id, a.name, 
'' IsIdentity '' ),0)    
    AND (b.ODBCVer is null or b.ODBCVer = 2)    
'      
execute ( @sqlstr )

declare   @name   varchar ( 20 )
declare   @type   varchar ( 20 )
declare  cur  cursor  scroll  for   select  column_name,type_name  from  #tmp
open  cur
fetch   next   from  cur  into   @name , @type
while   @@fetch_status   =   0
begin
    
insert   into  # text   values ( ' private  ' +   case   when   @type = ' varchar '   or   @type = ' nvarchar '   or   @type = ' char '   or   @type = ' text '   or   @type = ' ntext '   then   ' String  '   +   @name   +   ' ; '
                
when   @type = ' int '   or   @type = ' int identity '   then   ' int  '   +   @name   +   ' ; '
                
when   @type = ' datetime '   or   @type = ' smalldatetime '   then   ' DateTime  '   +   @name   +   ' ; '  
                
when   @type = ' bit '   then   ' bool  '   +   @name   +   ' ; '  
                
when   @type = ' decimal '   or   @type = ' numeric '   or   @type = ' money '   or   @type = ' smallmoney '   then   ' decimal  '   +   @name   +   ' ; '  
                
when   @type = ' float '   then   ' double  '   +   @name   +   ' ; '  
                
when   @type = ' binary '   or   @type = ' image '   or   @type = ' varbinary '   or   @type = ' timestamp '   then   ' byte[]  '   +   @name   +   ' ; '  
                
when   @type = ' real '   then   ' single  '   +   @name   +   ' ; '  
                
end
    )
    
fetch   next   from  cur  into   @name , @type
end

fetch  absolute  1   from  cur  into   @name , @type
while   @@fetch_status   =   0
begin
    
insert   into  # text   values ( ' public  ' +   case   when   @type = ' varchar '   or   @type = ' nvarchar '   or   @type = ' char '   or   @type = ' text '   or   @type = ' ntext '   then   ' String  '   +   upper ( @name )
                
when   @type = ' int '   or   @type = ' int identity '   then   ' int  '   +   upper ( @name )
                
when   @type = ' datetime '   or   @type = ' smalldatetime '   then   ' DateTime  '   +   upper ( @name )
                
when   @type = ' bit '   then   ' bool  '   +   upper ( @name
                
when   @type = ' decimal '   or   @type = ' numeric '   or   @type = ' money '   or   @type = ' smallmoney '   then   ' decimal  '   +   @name
                
when   @type = ' float '   then   ' double  '   +   @name
                
when   @type = ' binary '   or   @type = ' image '   or   @type = ' varbinary '   or   @type = ' timestamp '   then   ' byte[]  '   +   @name
                
when   @type = ' real '   then   ' single  '   +   @name
                
end
    )
    
insert   into  # text   values ( ' { ' )
    
insert   into  # text   values ( ' get{return this. '   +   @name   +   ' ;} ' )
    
insert   into  # text   values ( ' set{this. '   +   @name   +   '  = value;} ' )
    
insert   into  # text   values ( ' } ' )
    
fetch   next   from  cur  into   @name , @type
end
close  cur
deallocate  cur
select   *   from  # text
drop   table  #tmp
drop   table  # text
GO

exec  generatecode  ' userinfo '



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1181548

[ 点击此处收藏本文]   guoguo19811025发表于 2006年09月05日 21:17:00
href="http://blog.youkuaiyun.com/guoguo19811025/Services/Pingback.aspx" rel="pingback" />

 
emo 发表于2006-09-06 11:53:00  IP: 61.29.197.*
恩,有个小错误,@type='numberic' ,应该是numeric吧?

 
vfp_system 发表于2006-09-06 22:58:00  IP: 58.20.32.*
不错,省了我好多事啦。生成的代码只要小小改动即可用。

 
蝈蝈 发表于2006-09-07 08:12:00  IP: 221.6.19.*
感谢emo帮我指出错误,即刻更改,谢谢!
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值