码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-03-11 12:06:31      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

数据库在设计的时候也许考虑不全面,导致某些字段类型不太准确。比如设计的时候是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;

就这样,一个循环搞定。

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

标签:

原文地址:http://www.cnblogs.com/tangzhengyue/p/4329146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!