2010-03-31 54 views
5

我有一個相當大的數據庫,在很多表中有很多小數列,客戶現在已經改變了主意並希望所有數字(小數)都具有精確度爲3 dp而不是原來的兩個。是否有快速的方法來查看數據庫中的所有表格,並將該表格中的任何小數點列更改爲3.d.p而不是2 d.p?更改數據庫中每個表中所有小數列的精度

db在sql 2005上。

任何幫助都會很棒。

+0

我看到你說過SQL Server,但我不記得該怎麼做。我知道,如果這是Oracle,我會查詢all_tab_cols來查找x.2的十進制列,然後生成一個腳本來一次更改它們。你在問什麼?你只需要看看主數據庫找到類似的表? – MJB 2010-03-31 20:14:51

回答

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

Fantastic,這很棒!你爲我節省了很多時間。再次感謝! – Jon 2010-03-31 20:33:36

+0

很高興我能幫到你。 – cmsjr 2010-03-31 20:47:21

+0

+1 - 不錯的工作! – hunter 2010-04-01 12:29:02

1

如果你能得到的表和列名這不應該是如此糟糕

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

嗨,感謝anwser,unfortunalty這是一個相當大的數據庫,在這些表中有很多表格和列需要更改,我只是想知道有沒有辦法自動查看所有表格和列,並在需要時進行更改 – Jon 2010-03-31 20:20:14

0

基於@cmsjr建議和其他幫助從計算器我想出了下面的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 
相關問題