我的 DECIMAL(A,B)列太多了。其中一些有列默认值,其中一些可以为空,等等。
而不是使用:
ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DECIMAL(A,C)
是否有方法只是更新DECIMAL的SCALE?
答案 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)
请勿忘记将A
和C
替换为正确的Precision
和Scale
答案 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);