如何更改Sql Server中十进制列的精度?

And*_*nes 76 sql-server

有没有办法改变Sql Server中现有十进制列的精度?

小智 141

ALTER TABLE Testing ALTER COLUMN TestDec decimal(16,1)
Run Code Online (Sandbox Code Playgroud)

只需将decimal(precision, scale)精度和比例替换为所需的值即可.

我没有对表格中的数据进行任何测试,但是如果你改变了精度,如果新的精度较低,你将会丢失数据.

  • 为了回答我自己的问题,我创建了一个sqlfiddle:http://sqlfiddle.com/#!3/4b8cb/1/0.答案是将十进制(18,2)更改为十进制(18,3)将导致更改表时出错.十进制(18,2)到十进制(19,3)虽然应该工作. (11认同)
  • 当将小数(18,2)的精度提高到小数(18,3)时,这对我有用。 (2认同)

bni*_*and 10

可能有更好的方法,但您始终可以将列复制到新列中,删除它并将新列重命名为第一列的名称.

以机智:

ALTER TABLE MyTable ADD NewColumnName DECIMAL(16, 2);
GO

UPDATE  MyTable
SET     NewColumnName = OldColumnName;
GO

ALTER TABLE CONTRACTS DROP COLUMN OldColumnName;
GO


EXEC sp_rename
    @objname = 'MyTable.NewColumnName',
    @newname = 'OldColumnName',
    @objtype = 'COLUMN'
GO
Run Code Online (Sandbox Code Playgroud)

这是在SQL Server 2008 R2上测试的,但应该适用于SQL Server 2000+.