仅更改十进制的比例

时间:2018-01-16 13:29:22

标签: sql-server azure-sql-database

我的 DECIMAL(A,B)列太多了。其中一些有列默认值,其中一些可以为空,等等。

而不是使用:

ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DECIMAL(A,C)

是否有方法只是更新DECIMAL的SCALE?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用修改关键字

ALTER TABLE "table_name" MODIFY "column_name" "New Data Type";

答案 1 :(得分:0)

这是一种方式

DECLARE @sql VARCHAR(max)= ''

SET @sql = (SELECT 'ALTER TABLE TABLE_NAME ALTER COLUMN ' + COLUMN_NAME + ' DECIMAL(A,C);'
            FROM   information_schema.columns
            WHERE  table_name = 'TABLE_NAME'
                   AND data_type = 'DECIMAL'
                   AND NUMERIC_SCALE = --B
                    --add relevant filters
            FOR xml path(''))

--print @sql
EXEC (@sql) 

请勿忘记将AC替换为正确的PrecisionScale

答案 2 :(得分:0)

使用可以通过执行动态SQL查询来实现它。使用 stuff 功能连接每个 alter 语句,并从 <检索列名和其他详细信息EM> information_schema.columns 即可。创建另一个变量以保存新的 numeric_scale 值,并从 numeric_precision中获取 information_schema.columns 本身。

<强>查询

declare @sql as varchar(max);
declare @i as int = 3; -- change accordingly
select @sql = stuff((
        select 'alter table ' + [table_name] 
        + ' alter column ' + [column_name] + ' decimal(' 
        + cast([numeric_precision] as varchar(100)) + ',' + cast(@i as varchar(100)) + ');'
        from information_schema.columns
        where table_name = 'your_table_name'
        and data_type = 'decimal'
        for xml path('')
    )
    , 1, 0, ''
);

exec(@sql);