我有一個相當大的數據庫,在很多表中有很多小數列,客戶現在已經改變了主意並希望所有數字(小數)都具有精確度爲3 dp而不是原來的兩個。是否有快速的方法來查看數據庫中的所有表格,並將該表格中的任何小數點列更改爲3.d.p而不是2 d.p?更改數據庫中每個表中所有小數列的精度
db在sql 2005上。
任何幫助都會很棒。
我有一個相當大的數據庫,在很多表中有很多小數列,客戶現在已經改變了主意並希望所有數字(小數)都具有精確度爲3 dp而不是原來的兩個。是否有快速的方法來查看數據庫中的所有表格,並將該表格中的任何小數點列更改爲3.d.p而不是2 d.p?更改數據庫中每個表中所有小數列的精度
db在sql 2005上。
任何幫助都會很棒。
基於類型和規模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
如果你能得到的表和列名這不應該是如此糟糕
ALTER TABLE MyTable ALTER COLUMN MyColumn DECIMAL(#,#)
嗨,感謝anwser,unfortunalty這是一個相當大的數據庫,在這些表中有很多表格和列需要更改,我只是想知道有沒有辦法自動查看所有表格和列,並在需要時進行更改 – Jon 2010-03-31 20:20:14
基於@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
我看到你說過SQL Server,但我不記得該怎麼做。我知道,如果這是Oracle,我會查詢all_tab_cols來查找x.2的十進制列,然後生成一個腳本來一次更改它們。你在問什麼?你只需要看看主數據庫找到類似的表? – MJB 2010-03-31 20:14:51