104 votes

Comment modifier la précision d'une colonne décimale dans Sql Server ?

Existe-t-il un moyen de modifier la précision d'une colonne décimale existante dans Sql Server ?

186voto

VanSkalen Points 459
ALTER TABLE Testing ALTER COLUMN TestDec decimal(16,1)

Mettez juste decimal(precision, scale) en remplaçant la précision et l'échelle par les valeurs que vous souhaitez.

Je n'ai pas effectué de tests avec les données du tableau, mais si vous modifiez la précision, vous risquez de perdre des données si la nouvelle précision est inférieure.

2 votes

Cela a fonctionné pour moi lorsque j'ai augmenté la précision d'un décimal(18,2) en décimal(18,3).

0 votes

Si vous avez un nombre à 16 chiffres (au total) et que vous augmentez l'échelle, est-ce que les chiffres d'ordre supérieur seront supprimés pour faire de la place aux deux nouvelles décimales ? Malheureusement, je ne peux pas tester cela pour le moment.

14 votes

Pour répondre à ma propre question, j'ai créé un sqlfiddle : sqlfiddle.com/#!3/4b8cb/1/0 . La réponse est que changer decimal(18,2) en decimal(18,3) entraînera une erreur lors de la modification de la table. decimal(18,2) en decimal(19,3) devrait cependant fonctionner.

14voto

bnieland Points 856

Il existe peut-être un meilleur moyen, mais vous pouvez toujours copier la colonne dans une nouvelle colonne, la déposer et renommer la nouvelle colonne avec le nom de la première colonne.

à savoir :

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

Ceci a été testé sur SQL Server 2008 R2, mais devrait fonctionner sur SQL Server 2000+.

0voto

H Shah Points 9
ALTER TABLE (Your_Table_Name) MODIFY (Your_Column_Name) DATA_TYPE();

Pour votre problème :

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

0voto

Nilucshan Siva Points 145

Dans Oracle 10G et les versions ultérieures, la déclaration suivante fonctionnera.

ALTER TABLE <TABLE_NAME> MODIFY <COLUMN_NAME> <DATA_TYPE>

Si le type de données actuel est NUMBER(5,2) et que vous voulez le changer en NUMBER(10,2), voici l'instruction

ALTER TABLE <TABLE_NAME> MODIFY <COLUMN_NAME> NUMBER(10,2)

-2voto

4302836 Points 193
ALTER TABLE `tableName` CHANGE  `columnName` DECIMAL(16,1) NOT NULL;

J'utilise ceci pour l'altération

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X