เปลี่ยนความยาวของ varchar บนตารางผลิตภัณฑ์สด


25

ฉันมีเซิร์ฟเวอร์ฐานข้อมูล MS SQL Server 2008 R2 อยู่ในขณะนี้ที่ใช้กับแอปที่ใช้งานจริง

การปรับปรุงใหม่ให้กับแอพตอนนี้ต้องการvarchar(100)คอลัมน์ในตารางที่จะเพิ่มความยาว

ความยาวของคอลัมน์ที่มีอยู่นี้ใน prod DB จะเพิ่มขึ้นได้หรือไม่โดยไม่กระทบต่อข้อมูลปัจจุบัน

การเปลี่ยนแปลงนี้จะต้องเสร็จสิ้นในช่วงนอกเวลาทำการเพื่อหลีกเลี่ยงการหยุดให้บริการหรือไม่?

คำตอบ:


42

หากคุณกำลังเพิ่มเป็นvarchar(100 - 8000)(เช่นสิ่งอื่นที่ไม่ใช่varchar(max)) และคุณกำลังทำสิ่งนี้ผ่าน TSQL มากกว่า SSMS GUI

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

และไม่เปลี่ยนค่าความไร้ค่าของคอลัมน์จากNULLเป็นNOT NULL(ซึ่งจะล็อกตารางในขณะที่แถวทั้งหมดได้รับการตรวจสอบความถูกต้องและอาจเขียนถึง ) หรือจาก NOT NULLเป็นเป็นNULL ในบางกรณีนี่เป็นข้อมูลเมตาด่วนที่เปลี่ยนแปลงเท่านั้น อาจต้องรอการSCH-Mล็อกบนโต๊ะ แต่เมื่อได้รับแล้วการเปลี่ยนแปลงนั้นจะเกิดขึ้นทันที

ข้อแม้หนึ่งที่ต้องระวังคือในระหว่างที่รอการSCH-Mล็อกการสืบค้นอื่น ๆจะถูกบล็อกแทนที่จะข้ามคิวล่วงหน้าดังนั้นคุณอาจต้องการพิจารณาเพิ่มคำสั่งSET LOCK_TIMEOUTแรก

ยังให้แน่ใจว่าในALTER TABLEคำสั่งที่คุณระบุอย่างชัดเจนว่าเป็นรัฐที่คอลัมน์เดิมเป็นอย่างอื่นคอลัมน์จะมีการเปลี่ยนแปลงที่จะอนุญาตให้NOT NULLNULL


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