SQL Serverの10進列の精度を変更するにはどうすればよいですか?


回答:


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

を置くだけでdecimal(precision, scale)、精度とスケールを希望の値に置き換えます。

テーブル内のデータを使用してこれを使用したテストは行っていませんが、精度を変更すると、新しい精度が低くなるとデータが失われる可能性があります。


2
これは、decimal(18,2)の精度をdecimal(18,3)に上げるときにうまくいきました。
レベッカ

ありがとう、とてもシンプルですが、まだ見つけるのは難しいです。
Philippe Lavoie 2012

16(合計)桁の数値があり、スケールを大きくした場合、新しい小数点以下2桁のスペースを確保するために、上位桁で切り捨てられますか?残念ながら、現時点ではこれをテストできません。
user420667 2013

12
私自身の質問に答えるために、sqlfiddleを作成しました:sqlfiddle.com / !3 / 4b8cb / 1/0。答えは、decimal(18,2)をdecimal(18,3)に変更すると、テーブルを変更するときにエラーが発生するということです。動作するはずですが、decimal(18,2)からdecimal(19,3)まで。
user420667 2013

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

これはSQLServer 2008 R2でテストされましたが、SQL Server2000以降でも機能するはずです。


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

エンタープライズマネージャー、デザインテーブルに移動し、フィールドをクリックします。

10進数の列を作成します

下部のプロパティには、精度プロパティがあります


4
これにより、テーブルが再作成されます。
アレクサンダーコジェフニコフ2008

1
その場合は、そうしないでください:p
qui

そのデザインテーブルのページがわかりませんでした。クエリでこれを行うのに問題はありませんが、データ型に関してそこで編集を行うことはできません。おそらく、デザインページはバックグラウンドでクエリを使用していますが、この制限が実装された理由がわかりません。
フラットな2013年

3
これは、[ツール]> [オプション]> [デザイナ]-「テーブルの再作成が必要な変更の保存を防ぐ」から無効にできます。
クリス・ミサ典
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.