2010-03-31 2 views
5

У меня есть довольно большая база данных, в которой много десятичных столбцов в много таблиц, теперь клиент передумал и хочет, чтобы все числа (десятичные знаки) имели точность 3 dp вместо двух оригинальных. Есть ли быстрый способ просмотреть все таблицы в базе данных и изменить любой десятичный столбец в этой таблице, чтобы иметь 3.d.p вместо 2 d.p?Измените точность всех десятичных столбцов в каждой таблице базы данных

БД на SQL 2005.

Любая помощь будет большим.

+0

Я видел, что вы сказали SQL Server, но я не могу вспомнить, как это сделать. Я знаю, что если бы это был Oracle, я бы запросил all_tab_cols, чтобы найти десятичные столбцы, которые являются x.2, и сгенерировать скрипт для их изменения по одному. Это то, что вы просите? Вам просто нужно взглянуть на мастера db, чтобы найти аналогичную таблицу? – MJB

ответ

7

Получить столбцы из information_schema в зависимости от типа и масштаба, а затем изменить их, чтобы иметь желаемый масштаб.

declare @col sysname 
declare @tbl sysname 
declare @sql nvarchar(256) 

declare crsFix cursor for 
select table_name, Column_name from information_schema.columns 
where data_type = 'decimal' and Numeric_Scale = 3 
open crsFix 
fetch next from crsFix into @tbl, @col 
while(@@Fetch_Status = 0) 
Begin 
    set @sql = 'Alter table [' + @tbl + '] alter column [' + @col + '] decimal(38,2) ' 
    print @sql 
    exec sp_executesql @sql 
    fetch next from crsFix into @tbl, @col 
End 
close crsFix 
deallocate crsFix 
+0

Фантастический, отлично! Ты спас мне много времени. Еще раз спасибо! – Jon

+0

Рад, что я мог помочь. – cmsjr

+0

+1 - хорошая работа! – hunter

1

Если вы можете получить имена таблиц и столбцов, это не должно быть так плохо

ALTER TABLE MyTable ALTER COLUMN MyColumn DECIMAL(#,#) 
+0

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

0

основе @cmsjr внушения и другой помощи от StackOverflow я придумал следующее TSQL, что перечислить все столбцы, тип данных числовой и генерирует скрипт для каждого столбца, который необходимо изменить.

SELECT c.TABLE_NAME, c.column_name, c.COLUMN_DEFAULT, c.IS_NULLABLE, c.NUMERIC_PRECISION, c.NUMERIC_SCALE 
, 'ALTER TABLE ' + c.TABLE_NAME + ' ALTER COLUMN ' + c.column_name + ' NUMERIC (18,5) ' + CASE c.IS_NULLABLE WHEN 'NO' THEN ' NOT NULL' ELSE ' NULL' END AS script 
FROM INFORMATION_SCHEMA.columns cs 
INNER JOIN INFORMATION_SCHEMA.tables t ON t.table_name = c.table_name 
WHERE c.data_type like 'numeric' AND t.table_type = 'base table' 
--AND c.NUMERIC_PRECISION in (9,18) AND c.NUMERIC_SCALE = 2 
Смежные вопросы