SQL MODIFY COLUMN PRECISION SIZE

时间:2017-02-10 06:22:12

标签: plsql

我在数字data_type中有超过1200列,可变大小:

TABLE_NAME.DATA_TYPE(NUMBER(10,2)

在一次拍摄中,我想将所有列大小更改为另一个大小,如:

TABLE_NAME.DATA_TYPE(NUMBER(15,2)

如何做到这一点?

2 个答案:

答案 0 :(得分:0)

简单的答案是你不能。你必须一次做一个....但你基本上可以使用其他一些代码一次性完成所有这些。您可以使用循环使用可以导出的所有列名称向数据库发送查询。

如果您需要从表格中获取所有列名称,可以通过查询Information Schema views

来执行此操作
SELECT *
FROM DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

然后导出这些列并将它们放在数组或另一个临时表中。然后创建一个循环遍历所有列名称的循环,并发送一个查询来一次更改数据类型和.... BAM。

希望这有帮助

答案 1 :(得分:0)

declare @schema nvarchar(255)
declare @table nvarchar(255)='TABLE_NAME'
declare @col nvarchar(255)
declare @dtype nvarchar(255)
declare @sql nvarchar(max)
declare maxcols cursor for

select
    c.TABLE_SCHEMA,
    c.TABLE_NAME,
    c.COLUMN_NAME,
    c.DATA_TYPE
from
INFORMATION_SCHEMA.COLUMNS c
inner join INFORMATION_SCHEMA.TABLES t on
    c.TABLE_CATALOG = t.TABLE_CATALOG
    and c.TABLE_SCHEMA = t.TABLE_SCHEMA
    and c.TABLE_NAME = t.TABLE_NAME
    and t.TABLE_TYPE = 'BASE TABLE'
where
    c.DATA_TYPE like 'NUMBER(10,2)'
    and c.CHARACTER_MAXIMUM_LENGTH = -1

open maxcols

fetch next from maxcols into @schema, @table, @col, @dtype

while @@FETCH_STATUS = 0
begin
    set @sql = 'alter table [' + @schema + '].[' + @table + 
        '] alter column [' + @col + '] ' + @dtype + 'NUMBER(15,2)'
    exec sp_executesql @sql

    fetch next from maxcols into @schema, @table, @col, @dtype
end

close maxcols
deallocate maxcols