• 自动生成存储过程的脚本


    如果一个表的字段非常的多的话,平时写存储过程,是不是很耗费时间呢,盯着眼睛痛,有了自动生成代码程序,只需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

  • 相关阅读:
    MyOD-Linux od命令的实现
    20175320 2018-2019-2 《Java程序设计》第9周学习总结
    MyCP-实现文件的复制以及进制转换
    20175320 2018-2019-2 《Java程序设计》第8周学习总结
    2018-2019-2 20175320实验二《Java面向对象程序设计》实验报告
    20175320 2018-2019-2 《Java程序设计》第7周学习总结
    类定义20175320
    20175320 2018-2019-2 《Java程序设计》第6周学习总结
    结对编程项目-四则运算阶段性总结
    算法复习周------递归之“合并排序”
  • 原文地址:https://www.cnblogs.com/meiwlongblog/p/2922356.html
Copyright © 2020-2023  润新知