ข้อผิดพลาด 'ไม่อนุญาตให้บันทึกการเปลี่ยนแปลงของ SQL Server' ►ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่


749

เมื่อฉันสร้างตารางใน SQL Server และบันทึกถ้าฉันพยายามแก้ไขการออกแบบตารางเช่นเปลี่ยนประเภทคอลัมน์จาก int เป็นจริงฉันได้รับข้อผิดพลาดนี้:

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

ทำไมฉันต้องสร้างตารางอีกครั้ง? ผมแค่อยากจะเปลี่ยนชนิดข้อมูลจากการsmallintreal

ตารางว่างเปล่าและฉันไม่ได้ใช้จนถึงตอนนี้


คำตอบ:


1466

จากกล่องโต้ตอบบันทึก (ไม่อนุญาต) บน MSDN :

บันทึก (ไม่ได้รับอนุญาต) กล่องโต้ตอบเตือนคุณว่าการเปลี่ยนแปลงการบันทึกไม่ได้รับอนุญาตเพราะการเปลี่ยนแปลงที่คุณได้ทำตารางต้องจดทะเบียนที่จะลดลงและสร้างขึ้นใหม่

การกระทำต่อไปนี้อาจต้องมีการสร้างตารางใหม่:

  • เพิ่มคอลัมน์ใหม่ไปที่ตรงกลางของตาราง
  • วางคอลัมน์
  • การเปลี่ยนค่าลบคอลัมน์
  • การเปลี่ยนลำดับของคอลัมน์
  • การเปลี่ยนประเภทข้อมูลของคอลัมน์ <<<<

การเปลี่ยนแปลงตัวเลือกนี้ในการเครื่องมือเมนูคลิกตัวเลือกขยาย ออกแบบและจากนั้นคลิกโต๊ะและออกแบบฐานข้อมูล เลือกหรือยกเลิกการเปลี่ยนแปลงประหยัดป้องกันที่จำเป็นต้องมีตารางที่จะสร้างขึ้นใหม่กล่องกา

ดูเพิ่มเติมค้นบล็อกของ Kwong:
การเปลี่ยนแปลงการบันทึกไม่ได้รับอนุญาตใน SQL 2008 Management Studio


7
SSMS ไม่ควรปล่อยให้คุณทำสิ่งที่ไม่ปลอดภัยโดยไม่เตือนคุณก่อน แต่มีการสำรองข้อมูลในมือในกรณีที่
Robert Harvey

40
ตัวเลือกนี้จะบอก SSMS ว่าสามารถไปข้างหน้าและสร้างตารางชั่วคราวในสคีมาใหม่คัดลอกข้อมูลลงในนี้จากนั้นลบตารางเก่าและเปลี่ยนชื่อตารางชั่วคราวกลับไปเป็นชื่อเดิม ทุกอย่างที่ควรทำตามที่ควรจะเป็นในการทำธุรกรรมอย่างไรก็ตามความสัมพันธ์จะถูกทำลายและสร้างใหม่ดังนั้นหากไม่ได้ 100% ก็สามารถทำสิ่งที่ไม่คาดคิด
Justin King

13
ไม่ทราบว่าทำไมฉันไม่สามารถจำขั้นตอนง่าย ๆ เหล่านั้นเพื่อดรอปดาวน์ตัวเลือกนี้และฉันต้องค้นหาวิธีแก้ปัญหาเสมอ Hehehehehe ขอบคุณคน!
นักพัฒนา

8
วัวศักดิ์สิทธิ์ - คุณสามารถปิดสิ่งนี้เพื่อให้ผ่านข้อผิดพลาดนี้ได้หรือไม่? ฉันไม่รู้เรื่องนี้และในช่วง 3 ปีที่ผ่านมาพวกเขากลัวที่จะออกแบบตารางโดยไม่ตั้งใจ Identity Specification และต้องสร้างตารางใหม่ขึ้นมา สุดยอดเคล็ดลับ!
nocarrier

4
นี่คือ CAVEAT ไมโครซอฟท์ในการปิดใช้งาน 'การเปลี่ยนแปลงป้องกันการบันทึกการ ...' ตัวเลือก: support.microsoft.com/en-us/kb/956176 โดยทั่วไปคุณสามารถสูญเสียข้อมูลเมตาเช่นการติดตามการเปลี่ยนแปลงหากเป็นคุณลักษณะที่คุณใช้
Baodad

205

คุณใช้ SSMS หรือไม่

ถ้าใช่ให้ไปที่เมนูเครื่องมือ >> ตัวเลือก >> นักออกแบบและยกเลิกการเลือก“ ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องสร้างตารางใหม่”


เครื่องมือ >> ตัวเลือกและอื่น ๆ ไม่ใช่ "เมนู" (เพียงจากมุมมอง ssms 2014 ซึ่งฉันเชื่อว่าเหมือนกันในเวอร์ชันเก่า)
Tom Stickel

@ TomStickel ฉันเดาว่าฉันหมายถึงไปที่เมนู: "Tools"
ypercubeᵀᴹ

: P ใช่ฉันคิดว่าเพียงแค่คิดว่าฉันจะแสดงความคิดเห็นสำหรับทุกคนที่จะได้รับ "ติด" จริงน่ากลัวฉันรู้ แต่ฉันคิดว่าบางคนสามารถโยนมือของพวกเขาได้อย่างรวดเร็ว ... ขอบคุณ
Tom Stickel

2
@NeilMeyer ระวังว่ามีการทำเครื่องหมายที่ช่องทำเครื่องหมายด้วยเหตุผล เป็นมาตรการด้านความปลอดภัยเพื่อป้องกันการดำเนินการที่จะลดลงและสร้างตารางขึ้นใหม่ (และทำให้ข้อมูลทั้งหมดสูญหายดังนั้นโปรดใช้ด้วยความระมัดระวัง!
ypercubeᵀᴹ

ความสัมพันธ์ระหว่างตารางจะหายไปหรือไม่หากมีการสร้างตารางใหม่เช่นนี้
Neil Meyer

78

ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่

ห้าคลิกที่รวดเร็ว

ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องสร้างตารางใหม่ในห้าคลิก

  1. เครื่องมือ
  2. ตัวเลือก
  3. นักออกแบบ
  4. ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่
  5. ตกลง

หลังจากบันทึกแล้วให้ทำซ้ำตามขั้นตอนเพื่อทำเครื่องหมายในช่องอีกครั้ง ตู้เซฟนี้ป้องกันการสูญหายของข้อมูลโดยไม่ตั้งใจ

คำอธิบายเพิ่มเติม

  • โดยค่าเริ่มต้น SQL Server Management Studio ป้องกันการหล่นของตารางเนื่องจากเมื่อตารางถูกทิ้งเนื้อหาของข้อมูลจะสูญหาย *

  • เมื่อแก้ไขประเภทข้อมูลของคอลัมน์ในมุมมองออกแบบตารางเมื่อบันทึกการเปลี่ยนแปลงฐานข้อมูลจะลดลงจากตารางภายในจากนั้นสร้างใหม่ขึ้นมาใหม่

* สถานการณ์เฉพาะของคุณจะไม่เกิดขึ้นเนื่องจากโต๊ะของคุณว่างเปล่า ฉันให้คำอธิบายทั้งหมดเพื่อปรับปรุงความเข้าใจของคุณเกี่ยวกับกระบวนการนี้


27

เมื่อต้องการเปลี่ยนการป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องใช้ตัวเลือกการสร้างตารางใหม่

เปิด Studio จัดการเซิร์ฟเวอร์ SQL (SSMS) บนเมนูเครื่องมือให้คลิกตัวเลือก

ในบานหน้าต่างนำทางของหน้าต่างตัวเลือกคลิกนักออกแบบ

เลือกหรือล้างกล่องกาเครื่องหมายป้องกันการเปลี่ยนแปลงการบันทึกที่ต้องการสร้างตารางใหม่แล้วคลิกตกลง

หมายเหตุ : หากคุณปิดใช้งานตัวเลือกนี้คุณจะไม่ได้รับการเตือนเมื่อคุณบันทึกตารางที่การเปลี่ยนแปลงที่คุณทำมีการเปลี่ยนแปลงโครงสร้างข้อมูลเมตาของตาราง ในกรณีนี้การสูญหายของข้อมูลอาจเกิดขึ้นเมื่อคุณบันทึกตาราง

ป้อนคำอธิบายรูปภาพที่นี่


นักออกแบบตารางมีประโยชน์ แต่คุณไม่สามารถทำทุกอย่างให้สำเร็จได้
Sitecore Sam

22

มันเป็นปัญหาการตั้งค่าที่ง่ายและเรียบง่ายที่สามารถแก้ไขได้ใน 5 วินาทีโดยทำตามขั้นตอนเหล่านี้

เพื่อให้คุณบันทึกการเปลี่ยนแปลงหลังจากที่คุณเปลี่ยนตารางโปรดทำตามขั้นตอนเหล่านี้สำหรับการตั้งค่า sql ของคุณ:

  1. เปิด Microsoft SQL Server Management Studio 2008
  2. คลิกตัวเลือกเมนูเครื่องมือแล้วคลิกตัวเลือก
  3. เลือกนักออกแบบ
  4. ยกเลิกการเลือก "ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่" ตัวเลือก
  5. คลิกตกลง
  6. ลองเปลี่ยนโต๊ะของคุณ
  7. การเปลี่ยนแปลงของคุณจะดำเนินการตามที่ต้องการ

8
สิ่งนี้จะเพิ่มคำตอบที่ได้รับการยอมรับในทางใด?
Immortal Blue

17

ไปที่เครื่องมือซึ่งอยู่ที่เมนูด้านบน
เลือกตัวเลือกจากรายการแบบหล่นลงคุณมีป๊อปอัพตอนนี้เลือกตัวเลือกนักออกแบบที่อยู่ด้านซ้ายมือของเมนู ยกเลิกการเลือกตัวเลือกในการป้องกันการบันทึกการเปลี่ยนแปลงที่จำเป็นต้อง re-creation คลิกที่ปุ่มตกลง


12

ยกเลิกการทำเครื่องหมายในPrevent saving changes that require table re-creationช่องจากเครื่องมือ►ตัวเลือก►แท็บนักออกแบบ

ตัวอย่าง SQL Server 2012:

ป้อนคำอธิบายรูปภาพที่นี่


12

นี้สามารถเปลี่ยนแปลงได้อย่างง่ายดายในMicrosoft SQL Server

  1. เปิด Microsoft SQL Server Management Studio 2008
  2. คลิกเมนูเครื่องมือ
  3. คลิกตัวเลือก
  4. เลือกนักออกแบบ
  5. ยกเลิกการเลือก "ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่"
  6. คลิกตกลง

ป้อนคำอธิบายรูปภาพที่นี่


7

คัดลอกจากลิงค์นี้ "... สำคัญเราขอแนะนำอย่างยิ่งให้คุณไม่แก้ไขปัญหานี้ด้วยการปิดตัวเลือกป้องกันการบันทึกที่ต้องสร้างตารางใหม่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเสี่ยงของการปิดตัวเลือกนี้ให้ดูที่" ข้อมูลเพิ่มเติม "ส่วน ''

"... เมื่อต้องการแก้ไขปัญหานี้ให้ใช้คำสั่ง Transact-SQL เพื่อทำการเปลี่ยนแปลงโครงสร้างของข้อมูลเมตาของตารางสำหรับข้อมูลเพิ่มเติมดูที่หัวข้อต่อไปนี้ใน SQL Server Books Online

ตัวอย่างเช่นในการเปลี่ยนคอลัมน์ MyDate ของประเภทข้อมูลวันที่ในตารางที่ชื่อ MyTable เพื่อยอมรับค่า NULL คุณสามารถใช้:

เปลี่ยนตาราง MyTable แก้ไขคอลัมน์ MyDate7 datetime NULL "


2
ด้วยคำตอบมากมายที่บอกว่าเหมือนกันนี่คือคำตอบที่ฉันกำลังมองหาเนื่องจากฉันมีข้อมูลสดในตารางของฉันฉันไม่ต้องการคลาย ฉันต้องการอัปเดตคอลัมน์ทศนิยมจากตำแหน่งทศนิยม 0 ตำแหน่งเป็นทศนิยม 2 ตำแหน่งและข้อความสั่งเรียบง่ายนั้นทำงานได้อย่างสมบูรณ์แบบ!
stitz

โศกนาฏกรรมที่นี่คือ SSMS ควรทำสิ่งนี้ภายใต้ประทุนและดังนั้นจึงไม่จำเป็นต้องวางตาราง
m12lrpv

6

และในกรณีที่คนที่นี่ไม่สนใจเช่นเดียวกับฉัน:

สำหรับ Microsoft SQL Server 2012 ในกล่องโต้ตอบตัวเลือกจะมีกล่องกาเครื่องหมายเล็ก ๆ น้อย ๆ ที่แอบซ่อนการตั้งค่าอื่น ๆ ทั้งหมด แม้ว่าฉันจะต้องบอกว่าฉันพลาดสัตว์ประหลาดตัวเล็ก ๆ ไปตลอดเวลา !!!

หลังจากนั้นคุณอาจดำเนินการตามขั้นตอนนักออกแบบไม่เลือกป้องกันการบันทึก blah blah blah ...

sneaky_check_box_in_option


5

เครื่องมือ >> ตัวเลือก >> นักออกแบบและยกเลิกการเลือก“ ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่”:

คำอธิบายในรูปแบบภาพถ่าย


2

1) เครื่องมือเปิดซึ่งอยู่ด้านบน
2) เลือกตัวเลือกจาก Picklist
3) ตอนนี้มาถึงป๊อปอัพและตอนนี้คุณสามารถเลือกตัวเลือกนักออกแบบจากรายการเมนูทางด้านซ้าย
4) ตอนนี้ป้องกันการเปลี่ยนแปลงการบันทึกจะต้องไม่ถูกตรวจสอบว่าจำเป็นต้องสร้างตารางใหม่ ตอนนี้คลิกตกลง


1

จากเมนูเครื่องมือคลิกที่ตัวเลือกเลือกนักออกแบบจากเมนูด้านข้างและยกเลิกการเลือกป้องกันการเปลี่ยนแปลงที่สามารถนำไปสู่การพักผ่อนหย่อนใจของตาราง จากนั้นบันทึกการเปลี่ยนแปลง


0

หากคุณไม่เห็น "ป้องกันการบันทึกการเปลี่ยนแปลงที่จำเป็นต้องมีการสร้างตารางใหม่" ในรายการเช่นนั้น อิมเมจ

คุณต้องเปิดใช้งานการติดตามการเปลี่ยนแปลง

  • คลิกขวาที่ฐานข้อมูลของคุณแล้วคลิกคุณสมบัติ
  • คลิกเปลี่ยนการติดตามและเปิดใช้งาน
  • ไปที่เครื่องมือ -> ตัวเลือก -> ออกแบบอีกครั้งและยกเลิกการเลือก

0

หากคุณใช้สตูดิโอการจัดการเซิร์ฟเวอร์ sql ไปที่เครื่องมือ >> ตัวเลือก >> นักออกแบบและยกเลิกการเลือก“ ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่” มันใช้ได้กับฉัน

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