zoukankan      html  css  js  c++  java
  • 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;

    就这样,一个循环搞定。

  • 相关阅读:
    锁表
    vs2010宏的应用
    Oracle:sqlplus查询出的中文是乱码问题的解决(转)
    linux下查看端口和服务的一些命令
    netsh
    xpshutdown关机命令详解
    linux系统如何察看、修改系统时间
    delphi编程中调用其他执行程序?(转)
    如何修改Oracle用户密码的诀窍(转)
    转:用Delphi实现从Excel数据Update(Insert类似)到Oracle数据库表中
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/4329146.html
Copyright © 2011-2022 走看看