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;

就這樣,一個循環搞定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM