自动生成存储过程的脚本

如果一个表的字段非常的多的话,平时写存储过程,是不是很耗费时间呢,盯着眼睛痛,有了自动生成代码程序,只需F5一下就好了<( ̄︶ ̄)>

 

--自动生成存储过程Update

--要使用的数据库名
declare @DatabaseName varchar(100)
set @DatabaseName='Test'

--要使用的表名
declare @TableName varchar(100)
set @TableName='Profit'

--选出表的所有列名,列的数据类型,数据大小
declare TableCol Cursor For
SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.Columns c
INNER JOIN INFORMATION_SCHEMA.Tables t
      ON c.TABLE_NAME = t.TABLE_NAME
WHERE t.Table_Catalog = @DatabaseName
    AND t.TABLE_TYPE = 'BASE TABLE' and t.TABLE_NAME=@TableName
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION

DECLARE @TableSchema varchar(100), @TableNameTemp varchar(100)
DECLARE @ColumnName varchar(100), @DataType varchar(30)
DECLARE @CharLength int

declare @ColumnNameCleaned varchar(100)
declare @IDCount int
set @IDCount=1

declare @UpdateUpperPart varchar(4000)
declare @UpdateLowerPart varchar(4000)


open TableCol
fetch next from TableCol into @TableSchema, @TableNameTemp,
 @ColumnName, @DataType, @CharLength
while @@FETCH_STATUS = 0
 BEGIN
    set @ColumnNameCleaned = Replace(@ColumnName, ' ', '')
    --遍历到第一列字段的时候
    if(@IDCount=1)
    begin
        set @UpdateUpperPart = 'create procedure [dbo].[up_'+@TableNameTemp+'_update]'+CHAR(13)+
            '@p_'+@ColumnNameCleaned+'  '+@DataType
        if @DataType  IN ('varchar', 'nvarchar', 'char', 'nchar')
        begin
            set @UpdateUpperPart=@UpdateUpperPart+'('+CAST(@CharLength as varchar(12))+')'                
        end
        set @UpdateUpperPart= @UpdateUpperPart+CHAR(13)
        
        set @UpdateLowerPart='as'+CHAR(13)+
            'update [dbo].['+@TableNameTemp+']'+CHAR(13)+
            'set ['+@ColumnNameCleaned+']=@p_'+    @ColumnNameCleaned+CHAR(13)                
    end
    else
    begin
        set  @UpdateUpperPart=@UpdateUpperPart+',@p_'+@ColumnNameCleaned+'  '+
                    @DataType
        if @DataType  IN ('varchar', 'nvarchar', 'char', 'nchar')
        begin
            set @UpdateUpperPart=@UpdateUpperPart+'('+CAST(@CharLength as varchar(12))+')'                
        end
        set @UpdateUpperPart= @UpdateUpperPart+CHAR(13)
        
        
        set  @UpdateLowerPart=@UpdateLowerPart+',['+@ColumnNameCleaned+']=@p_'+
                    @ColumnNameCleaned+CHAR(13)
    end
    
    set @IDCount=@IDCount+1
    fetch next from TableCol into @TableSchema, @TableNameTemp,
        @ColumnName, @DataType, @CharLength
end
close TableCol
DEALLOCATE TableCol

print @UpdateUpperPart+@UpdateLowerPart

 

--自动生成存储过程Insert

--要使用的数据库名
declare @DatabaseName varchar(100)
set @DatabaseName='Test'

--要使用的表名
declare @TableName varchar(100)
set @TableName='Profit'

--选出表的所有列名,列的数据类型,数据大小
declare TableCol Cursor For
SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.Columns c
INNER JOIN INFORMATION_SCHEMA.Tables t
      ON c.TABLE_NAME = t.TABLE_NAME
WHERE t.Table_Catalog = @DatabaseName
    AND t.TABLE_TYPE = 'BASE TABLE' and t.TABLE_NAME=@TableName
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION

DECLARE @TableSchema varchar(100), @TableNameTemp varchar(100)
DECLARE @ColumnName varchar(100), @DataType varchar(30)
DECLARE @CharLength int

declare @ColumnNameCleaned varchar(100)
declare @IDCount int
set @IDCount=1

declare @InsertUpperPart varchar(4000)    --前半部分 create+参数
declare @InsertMiddlePart varchar(4000)    --中间部分 as+insert
declare @InsertLowerPart varchar(4000)    --后半部分 values


open TableCol
fetch next from TableCol into @TableSchema, @TableNameTemp,
 @ColumnName, @DataType, @CharLength
while @@FETCH_STATUS = 0
 BEGIN
    set @ColumnNameCleaned = Replace(@ColumnName, ' ', '')
    --遍历到第一列字段的时候
    if(@IDCount=1)
    begin
        set @InsertUpperPart = 'create procedure [dbo].[up_'+@TableNameTemp+'_Insert]'+CHAR(13)+
            '@p_'+@ColumnNameCleaned+'  '+@DataType
        if @DataType  IN ('varchar', 'nvarchar', 'char', 'nchar')
        begin
            set @InsertUpperPart=@InsertUpperPart+'('+CAST(@CharLength as varchar(12))+')'                
        end
        set @InsertUpperPart= @InsertUpperPart+CHAR(13)
        
        set @InsertMiddlePart = 'as'+CHAR(13)+
            'insert into [dbo].['+@TableNameTemp+']'+CHAR(13)+
            '(['+@ColumnNameCleaned+']'+CHAR(13)
        
        set @InsertLowerPart='values'+CHAR(13)+
            '(@p_'+@ColumnNameCleaned+CHAR(13)                
    end
    else
    begin
        set  @InsertUpperPart=@InsertUpperPart+',@p_'+@ColumnNameCleaned+'  '+
                    @DataType
        if @DataType  IN ('varchar', 'nvarchar', 'char', 'nchar')
        begin
            set @InsertUpperPart=@InsertUpperPart+'('+CAST(@CharLength as varchar(12))+')'                
        end
        set @InsertUpperPart= @InsertUpperPart+CHAR(13)
        
        set @InsertMiddlePart=@InsertMiddlePart+',['+@ColumnNameCleaned+']'+CHAR(13)
        
        set    @InsertLowerPart=@InsertLowerPart+',@p_'+@ColumnNameCleaned+CHAR(13)                
    end
    
    set @IDCount=@IDCount+1
    fetch next from TableCol into @TableSchema, @TableNameTemp,
        @ColumnName, @DataType, @CharLength
end
close TableCol
DEALLOCATE TableCol

set @InsertMiddlePart=@InsertMiddlePart+')'+CHAR(13)
set @InsertLowerPart=@InsertLowerPart+')'

print @InsertUpperPart+@InsertMiddlePart+@InsertLowerPart

 

 

 

转载于:https://www.cnblogs.com/meiwlongblog/archive/2013/02/22/2922356.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值