您的位置:首页 > 数据库

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

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


就这样,一个循环搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: