我在数字data_type中有超过1200列,可变大小:
TABLE_NAME.DATA_TYPE(NUMBER(10,2)
在一次拍摄中,我想将所有列大小更改为另一个大小,如:
TABLE_NAME.DATA_TYPE(NUMBER(15,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