打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL自动生成新增记录的存储过程
jcstone

弄了一个下午,终于完成自动生成新增记录的存储过程,自动生成存储过程SQL语句,包括存储过程的变量名和字段名。 
  
declare @tablename VARCHAR(256)   --表名称
set @tablename='DBTableName' 

DECLARE @FieldName Table
(
COLUMN_NAME  VARCHAR(50),
DATA_TYPE VARCHAR(50),
CHARACTER_MAXIMUM_LENGTH VARCHAR(50),
NUMERIC_PRECISION VARCHAR(50),
NUMERIC_SCALE VARCHAR(50)
)
 
INSERT INTO @FieldName
( COLUMN_NAME ,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE
    ) 
select
column_name
,data_type
,CHARACTER_MAXIMUM_LENGTH 
,NUMERIC_PRECISION
,NUMERIC_SCALE
from information_schema.columns where table_name = @tablename
--select *  from information_schema.columns where table_name = @tablename

--select * from @FieldName

declare @COLUMN_NAME  VARCHAR(50) 
declare @DATA_TYPE VARCHAR(50) 
declare @CHARACTER_MAXIMUM_LENGTH VARCHAR(50) 
declare @NUMERIC_PRECISION VARCHAR(50) 
declare @NUMERIC_SCALE VARCHAR(50)

declare @sql nvarchar(4000)


set @sql='SET ANSI_NULLS ON'+ CHAR(13)+CHAR(10)
set @sql=@sql+'Go'+CHAR(10)
set @sql=@sql+'SET QUOTED_IDENTIFIER ON'+CHAR(13)+CHAR(10)
set @sql=@sql+'Go'+CHAR(10)
set @sql=@sql+'-- ============================================='+CHAR(13)+CHAR(10)
set @sql=@sql+'-- Author: <Author,jcstone,Name>'+CHAR(13)+CHAR(10)
set @sql=@sql+'-- Create date: <Create Date,2015-7-29,>'+CHAR(13)+CHAR(10)
set @sql=@sql+'-- Description: <Description,新增记录,>'+CHAR(13)+CHAR(10)
set @sql=@sql+'-- ============================================='+CHAR(13)+CHAR(10)
set @sql=@sql+'CREATE PROCEDURE Proc_'+ @tablename+'_Insert'

 

 

declare myCursor cursor scroll dynamic for 
select * from @FieldName  

declare @sqlName table(name nvarchar(50),descript nvarchar(50))

open myCursor  
fetch next from myCursor into @COLUMN_NAME,@DATA_TYPE,@CHARACTER_MAXIMUM_LENGTH, @NUMERIC_PRECISION,@NUMERIC_SCALE

while (@@fetch_status=0) 
  begin 
    If @COLUMN_NAME<>'ID'
if @DATA_TYPE='nvarchar' 
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME,@DATA_TYPE+'('+@CHARACTER_MAXIMUM_LENGTH+')')
else if @DATA_TYPE='char' 
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME,@DATA_TYPE+'('+@CHARACTER_MAXIMUM_LENGTH+')')
else if @DATA_TYPE='nchar' 
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME,@DATA_TYPE+'('+@CHARACTER_MAXIMUM_LENGTH+')') 
else if @DATA_TYPE='decimal' 
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME ,@DATA_TYPE+'('+@NUMERIC_PRECISION+','+@NUMERIC_SCALE+')' )
else if @DATA_TYPE='float' 
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME,@DATA_TYPE+'('+@NUMERIC_PRECISION+','+@NUMERIC_SCALE+')' )
else  
insert into @sqlName(name,descript) values
(' @'+@COLUMN_NAME,@DATA_TYPE  )
 
 
   fetch next from myCursor into @COLUMN_NAME,@DATA_TYPE,@CHARACTER_MAXIMUM_LENGTH, @NUMERIC_PRECISION,@NUMERIC_SCALE
  end
 
 declare @Colstring varchar(500)

select @Colstring = isnull(@Colstring + ','+CHAR(13)+CHAR(10) , '' ) + isnull( Name+' '+descript, '' )
from @sqlName  
set @sql=@sql+@Colstring+CHAR(13)+CHAR(10)
 
close myCursor 
deallocate myCursor



print  CHAR(13)+CHAR(10)

set @sql=@sql+'  AS' + CHAR(13)+CHAR(10)
set @sql=@sql+'  BEGIN'+ CHAR(13)+CHAR(10)
set @sql=@sql+'  Insert into '+ @tablename  + CHAR(13)+CHAR(10)
set @sql=@sql+ '(' + CHAR(13)+CHAR(10)

declare @Colstring2 varchar(500) 
select @Colstring2 = isnull(@Colstring2 + ','+CHAR(13)+CHAR(10), '' ) + isnull( COLUMN_NAME , '' ) 
from @FieldName  where COLUMN_NAME<>'ID'

set @sql=@sql+@Colstring2 +  CHAR(13)+CHAR(10)
set @sql=@sql+')'+  CHAR(13)+CHAR(10)


declare @Colstring3 nvarchar(500) 
select @Colstring3 = isnull(@Colstring3 + ','+CHAR(13)+CHAR(10) , ' ' ) + isnull( '  '+Name , ' ' )
from @sqlName 

 
set @sql=@sql+'  values('+@Colstring3+CHAR(13)+CHAR(10)
set @sql=@sql+'      )'+CHAR(13)+CHAR(10)
set @sql=@sql+ '  END'+CHAR(13)+CHAR(10)
set @sql=@sql+ '  GO'+CHAR(13)+CHAR(10)

select @sql
print @sql
  
 
 

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
sql 数据库中只靠一个数据,查询到所在表和列名
在sql server 中执行带参数的存储过程及计算运行时间
SQL2000常用语法 - 怪你过分美丽的日志 - 网易博客
SQL存储过程测试(7)——当待测存储过程返回out参数时 如何判断测试结果是否通过
分页存储过程(sql2000通用型)
sql多种把查询结果转换成字符串方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服