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?

Andrew Jones
quelle

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.

VanSkalen
quelle
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.

bnieland
quelle
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); 
H Shah
quelle
-2
ALTER TABLE `tableName` CHANGE  `columnName` DECIMAL(16,1) NOT NULL;

Ich benutze dies für die Änderung

4302836
quelle
-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

qui
quelle
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