如何更改Sql Server中小数列的精度?


Answers:


157
ALTER TABLE Testing ALTER COLUMN TestDec decimal(16,1)

只需输入decimal(precision, scale),用您想要的值代替精度和小数位数。

我尚未使用表中的数据对此进行任何测试,但是如果您更改精度,则如果新精度较低,则可能会丢失数据。


2
当将十进制(18,2)的精度提高到十进制(18,3)时,这对我有用。
丽贝卡

谢谢,如此简单,仍然很难找到。
菲利普·拉沃

如果您有16个(总数)数字并增加了小数位数,它会在高阶数字上跳动以为2个新的小数位腾出空间吗?不幸的是,目前我无法对此进行测试。
user420667

12
为了回答我自己的问题,我创建了一个sqlfiddle:sqlfiddle.com/# !3/ 4b8cb/1/ 0。答案是将十进制(18,2)更改为十进制(18,3)会在更改表时导致错误。从十进制(18,2)到十进制(19,3),虽然应该可以工作。
user420667

12

也许有更好的方法,但是您始终可以将列复制到新列中,将其删除,然后将新列重命名为第一列的名称。

以机智:

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

这已经在SQL Server 2008 R2上进行了测试,但是应该可以在SQL Server 2000+上使用。


0
ALTER TABLE (Your_Table_Name) MODIFY (Your_Column_Name) DATA_TYPE();

对于您的问题:

ALTER TABLE (Your_Table_Name) MODIFY (Your_Column_Name) DECIMAL(Precision, Scale); 

-2
ALTER TABLE `tableName` CHANGE  `columnName` DECIMAL(16,1) NOT NULL;

我用这个做改变


-3

转到企业经理,设计表,单击您的字段。

制作一个十进制列

在底部的属性中有一个precision属性


4
这将重新创建表。
亚历山大·科耶夫尼科夫

1
在这种情况下,请不要这样做:p
qui

我从不了解设计表页面。即使在查询中这样做没有问题,您也不能在其中对数据类型进行任何形式的编辑。大概设计页面在后台使用查询,我不明白为什么要实现此限制。
2013年

3
您可以通过以下方式禁用此功能:工具>选项>设计器-“防止保存需要重新创建表的更改”。
克里斯·米萨尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.