ฉันจะเปลี่ยนความแม่นยำของคอลัมน์ทศนิยมใน Sql Server ได้อย่างไร


คำตอบ:


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

เพียงแค่ใส่decimal(precision, scale)แทนที่ความแม่นยำและมาตราส่วนด้วยค่าที่คุณต้องการ

ฉันยังไม่ได้ทำการทดสอบกับข้อมูลในตาราง แต่ถ้าคุณปรับเปลี่ยนความแม่นยำคุณอาจสูญเสียข้อมูลหากความแม่นยำใหม่ต่ำลง


2
สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อเพิ่มความแม่นยำสำหรับทศนิยม (18,2) เป็นทศนิยม (18,3)
รีเบคก้า

ขอบคุณที่เรียบง่าย แต่ยังหายาก
Philippe Lavoie

หากคุณมีตัวเลข 16 (ทั้งหมด) หลักและคุณเพิ่มมาตราส่วนมันจะทำให้ตัวเลขลำดับที่สูงกว่ามีที่ว่างสำหรับทศนิยมใหม่ 2 ตำแหน่งหรือไม่? ขออภัยไม่สามารถทดสอบได้ในขณะนี้
user420667

12
เพื่อที่จะตอบคำถามของฉันเองฉันสร้าง sqlfiddle A: 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

ไปที่ผู้จัดการองค์กรตารางออกแบบคลิกที่ฟิลด์ของคุณ

สร้างคอลัมน์ทศนิยม

ในคุณสมบัติที่ด้านล่างมีคุณสมบัติความแม่นยำ


4
สิ่งนี้จะสร้างตารางขึ้นมาใหม่
Alexander Kojevnikov

1
ในกรณีนั้นอย่าทำอย่างนั้น: p
qui

ฉันไม่เคยเข้าใจหน้าตารางออกแบบนั้น คุณไม่สามารถทำการแก้ไขในรูปแบบใด ๆ เกี่ยวกับประเภทข้อมูลได้แม้ว่าจะไม่มีปัญหาในการทำสิ่งนี้ในแบบสอบถามก็ตาม สันนิษฐานว่าหน้าออกแบบใช้การสืบค้นในพื้นหลังฉันไม่เข้าใจว่าเหตุใดจึงใช้ข้อ จำกัด นี้
Flater

3
คุณสามารถปิดใช้งานได้ผ่าน: เครื่องมือ> ตัวเลือก> นักออกแบบ - "ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องสร้างตารางใหม่"
คริส Missal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.