2017-02-10 13 views
0

У меня есть более чем 1200 столбцов в числе DATA_TYPE с переменным размером:SQL ИЗМЕНИТЬ COLUMN PRECISION РАЗМЕР

TABLE_NAME.DATA_TYPE(NUMBER(10,2) 

В одном кадре я хочу изменить все эти колонки размеров в другой размер, как:

TABLE_NAME.DATA_TYPE(NUMBER(15,2) 

Как это можно сделать?

+2

Пожалуйста, попробуйте объяснить свой вопрос немного .. – Seeker

+0

У меня есть более чем 1200 столбцов в числе DATA_TYPE с переменным размером. Теперь я хочу изменить все эти размеры столбца на другой размер, например, номер (15,2) –

ответ

0

Простой ответ: вы не можете. Вы должны делать их по одному ... но вы можете в основном использовать какой-то другой код, чтобы сделать все это одним выстрелом для вас. Вы можете использовать цикл для отправки запроса в ваш db, используя все имена столбцов, которые вы можете экспортировать.

Если вам нужно, чтобы получить все ваши имена столбцов из таблицы вы можете сделать это, запрашивая Information Schema views

SELECT * 
FROM DB_NAME.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'Customers' 

Затем экспортировать эти столбцы и поместить их либо в массиве или в другой временной таблице. Затем создайте цикл, который циклически проходит через все эти имена столбцов и отправляет запрос для изменения типа данных и .... BAM все сразу.

Надеется, что это помогает


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