• SQL脚本循环修改数据库字段类型


    数据库在设计的时候也许考虑不全面,导致某些字段类型不太准确。比如设计的时候是varchar(1024),但是实际使用的时候却发现太小了,装不下,于是需要修改字段类型为ntext什么的。

    我最近就遇到了一个需求,需要修改20个字段的类型,把相同的脚本写20遍吗?NO,NO,NO!

    ========================================================================

    我有这么一张表“Attribute”,里面有60个字段,分别是Attribute01、Attribute02、Attribute03、…… Attribute60。现在我需要把Attribute41到Attribute60的字段类型修改为ntext。

    SQL Server:

    DECLARE @i int
    SET @i=41
    DECLARE @fieldName varchar(32)
    DECLARE @sqlStatement varchar(MAX)
    
    WHILE @i<=60
    BEGIN
        SET @fieldName = 'Attribute' + cast(@i as varchar)
        
        SET @sqlStatement ='ALTER TABLE [Attribute] ALTER COLUMN ['+@fieldName+'] [ntext] NULL' 
        EXEC (@sqlStatement)
        
        SET @i=@i+1
    END

    Oracle:

    DECLARE
      i NUMBER;
      fieldName VARCHAR2(32);
      fieldNameBK VARCHAR2(32);
      sqlStatement VARCHAR2(1024);
      
    BEGIN
      i:=41;
      
      LOOP
        fieldName:='Attribute' || TO_CHAR(i);
        fieldNameBK:='Attribute' || TO_CHAR(i) || '_bak';
        
        --处理CLIPEX表
        sqlStatement:='Alter table Attribute ADD (' || fieldNameBK || ' NCLOB null)';
        EXECUTE IMMEDIATE sqlStatement;
        sqlStatement:='Update Attribute set ' || fieldNameBK || ' = ' || fieldName;
        EXECUTE IMMEDIATE sqlStatement;
        sqlStatement:='alter table Attribute drop COLUMN ' || fieldName;
        EXECUTE IMMEDIATE sqlStatement;
        sqlStatement:='alter table Attribute rename COLUMN  ' || fieldNameBK || ' to ' || fieldName;
        EXECUTE IMMEDIATE sqlStatement;
        
        i:=i+1;
        EXIT WHEN i > 60;
      END LOOP;
      
      COMMIT;
    END;

    就这样,一个循环搞定。

  • 相关阅读:
    debian 9 安装AMD驱动
    DDL、DML、DCL、DQL的理解
    呼叫中心坐席功能都有哪些?
    使用vi编辑器的问题
    百度聊天机器人UNIT http访问
    通过http方式 post天气,并合成语音
    单链表的基本操作
    pip下载慢解决(添加国内镜像)
    Anaconda+Tensorflow配置说明
    gdb的基本使用
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/4329146.html
Copyright © 2020-2023  润新知