Wie ändere ich die Genauigkeit einer Dezimalspalte in SQL Server?


85

Gibt es eine Möglichkeit, die Genauigkeit einer vorhandenen Dezimalspalte in SQL Server zu ändern?

Antworten:


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

Einfach ausgedrückt decimal(precision, scale), ersetzen Sie die Präzision und Skalierung durch Ihre gewünschten Werte.

Ich habe noch keine Tests mit Daten in der Tabelle durchgeführt, aber wenn Sie die Genauigkeit ändern, können Daten verloren gehen, wenn die neue Genauigkeit geringer ist.


2
Dies funktionierte für mich, als ich die Genauigkeit für eine Dezimalstelle (18,2) auf eine Dezimalzahl (18,3) erhöhte.
Rebecca

Danke, so einfach, immer noch schwer zu finden.
Philippe Lavoie

Wenn Sie eine 16 (Gesamt-) Ziffernzahl haben und die Skala erhöhen, wird sie dann auf den Ziffern höherer Ordnung angezeigt, um Platz für die 2 neuen Dezimalstellen zu schaffen? Leider kann ich das momentan nicht testen.
user420667

12
Um meine eigene Frage zu beantworten, habe ich eine sqlfiddle erstellt: sqlfiddle.com/#!3/4b8cb/1/0 . Die Antwort lautet, dass das Ändern der Dezimalzahl (18,2) in die Dezimalzahl (18,3) zu einem Fehler beim Ändern der Tabelle führt. Dezimal (18,2) bis Dezimal (19,3) sollten funktionieren.
user420667

12

Es gibt vielleicht einen besseren Weg, aber Sie können die Spalte jederzeit in eine neue Spalte kopieren, löschen und die neue Spalte wieder in den Namen der ersten Spalte umbenennen.

nämlich:

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

Dies wurde unter SQL Server 2008 R2 getestet, sollte jedoch unter SQL Server 2000+ funktionieren.


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

Für Ihr Problem:

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

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

Ich benutze dies für die Änderung


-3

Gehen Sie zu Enterprise Manager, Designtabelle und klicken Sie auf Ihr Feld.

Machen Sie eine Dezimalspalte

In den Eigenschaften unten befindet sich eine Präzisionseigenschaft


4
Dadurch wird die Tabelle neu erstellt.
Alexander Kojevnikov

1
In diesem Fall tun Sie das dann nicht: p
qui

Ich habe diese Designtabellenseite nie verstanden. Sie können dort keine Änderungen bezüglich des Datentyps vornehmen, obwohl dies in einer Abfrage problemlos möglich ist. Vermutlich verwendet die Design-Seite Abfragen im Hintergrund, ich verstehe nicht, warum diese Einschränkung implementiert wurde.
Flater

3
Sie können dies deaktivieren über: Extras> Optionen> Designer - "Speichern von Änderungen verhindern, die eine Neuerstellung der Tabelle erfordern".
Chris Missal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.