随笔 - 229  文章 - 2  评论 - 511  阅读 - 84万

outputProc

 

复制代码

CREATE proc GetProc    
(    
  
@tableName nvarchar(100),    
  
@procName nvarchar(100)    
)    
as    
    
--declare some variables that used by cursor  
declare @columnName nvarchar(100),    
@typeName nvarchar(100),    
@IsFixLength bit,    
@IsDecimal bit,    
@precision int,    
@scale int ,    
@max_length int     
    
    
--declare some variables that composed the procedure    
declare @sql1 nvarchar(1000),    
@sql2 nvarchar(1000),    
@sql3 nvarchar(1000)    
    
set @sql1='create proc '+@procName+char(13)    
set @sql1=@sql1+'('+char(13)    
set @sql2='insert into '+@tableName+char(13)+'('    
set @sql3='values'+char(13)    
set @sql3='values'+char(13)+'('    
    
    
    
    
DECLARE proc_cur CURSOR FOR    
SELECT c.name ColumnName,t.name typeName,case     
      
when t.name='bigint' THEN 1    
      
when t.name='bit' THEN 1    
      
when t.name='datetime' THEN 1    
      
when t.name='float' THEN 1    
      
when t.name='image' THEN 1    
      
when t.name='int' THEN 1    
      
when t.name='money' THEN 1    
      
when t.name='real' THEN 1    
      
when t.name='smalldatetime' THEN 1    
      
when t.name='smallint' THEN 1    
      
when t.name='smallmoney' THEN 1    
      
when t.name='tinyint' THEN 1    
      
when t.name='uniqueidentifier' THEN 1    
      
else 0    
      
end as IsFixLength,    
          
      
Case    
      
when t.name='decimal' THEN '1'    
      
when t.name='numeric' THEN '1'    
      
else 0    
      
end as IsDecimal,    
          
      c.
precision,c.scale,c.max_length    
         
          
 
FROM sys.columns c inner join sys.types t on c.user_type_id=t.user_type_id where c.object_id=object_Id(@tableName)    
 
and  t.name<>'timestamp' and is_computed=0
    
    
    
    
OPEN proc_cur;    
FETCH NEXT FROM proc_cur    
into @columnName,@typeName,@IsFixLength,@IsDecimal,@precision,@scale,@max_length    
    
WHILE @@FETCH_STATUS = 0    
BEGIN    
 
if @IsFixLength=1    
  
begin    
   
set @sql1=@sql1+'@'+@columnName+' '+@typeName+','+char(13)    
  
end    
 
else if @IsDecimal=1    
  
set @sql1=@sql1+'@'+@columnName+' '+@typeName+'('+cast(@precision as varchar(4))+','+cast(@precision as varchar(4))+'),'+char(13)    
 
else    
  
set @sql1=@sql1+'@'+@columnName+' '+@typeName+'('+cast(@max_length as varchar(4))+'),'+char(13)    
     
 
set @sql2=@sql2+'['+@columnname+'],'    
 
set @sql3=@sql3+'@'+@columnName+','    
     
FETCH NEXT FROM proc_cur into @columnName,@typeName,@IsFixLength,@IsDecimal,@precision,@scale,@max_length    
END;    
CLOSE proc_cur;    
DEALLOCATE proc_cur;     
    
--remove the last comma  and char(13)  
set @sql1=left(@sql1,len(@sql1)-2)    
--add the )    
set @sql1=@sql1+char(13)+')'+char(13)+'as'+char(13)    
  

set @sql2=left(@sql2,len(@sql2)-1)  +')'    
set @sql3=left(@sql3,len(@sql3)-1)  +')'    
    
print @sql1    
print @sql2    
print @sql3  
复制代码
posted on   stswordman  阅读(383)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2006-07-10 httpRuntime 元素(ASP.NET 设置架构)
2006-07-10 UpdateControl,ScriptManager,TimerControl,AutoCompleteExtender
< 2008年7月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示