更改数据库中每个表中所有十进制列的精度

Jon*_*Jon 5 sql sql-server-2005

我有一个相当大的数据库,在很多表中有很多十进制列,客户现在改变了主意,并希望所有数字(小数)的精度为3 dp而不是原来的2.有没有快速的方法来遍历数据库中的所有表并更改该表中的任何十进制列以具有3.dp而不是2 dp?

db在sql 2005上.

任何帮助都会很棒.

cms*_*sjr 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
Run Code Online (Sandbox Code Playgroud)