คุณสามารถสร้างกระบวนงานที่เก็บไว้ซึ่งอ้างอิงวัตถุที่ยังไม่มีอยู่ (เช่นตารางและฟังก์ชัน) คุณไม่สามารถสร้างกระบวนงานที่เก็บไว้ซึ่งอ้างอิงคอลัมน์ที่ยังไม่มีอยู่ในวัตถุที่มีอยู่แล้ว นี่คือดาบสองคมของการจำแนกชื่อรอการตัดบัญชี - SQL Server ให้ประโยชน์แก่คุณในบางกรณี แต่ไม่ทั้งหมด ดูความคิดของ Erland SET STRICT_CHECKS ON;
เพื่อรับความคิดเกี่ยวกับสถานที่ที่งานนี้และสถานที่ที่แตก:
http://www.sommarskog.se/strict_checks.html
(และวิธีที่เขาต้องการให้ขั้วตรงข้ามของสิ่งที่คุณเป็น - คุณต้องการอนุญาตให้รวบรวมอะไรโดยไม่คำนึงถึงการดำรงอยู่และเขาต้องการให้ตรวจสอบทุกคอลัมน์หรือตารางเดียว)
ไม่มีการตั้งค่าเหมือนSET DEFERRED_NAME_RESOLUTION OFF;
ว่ามีการถามถึง:
http://connect.microsoft.com/sql/127152
IGNORE ALL_RESOLUTION;
และมีการตั้งค่าที่ไม่เหมือนใคร
คุณสามารถหลีกเลี่ยงปัญหานี้ได้ในสองสามวิธี ได้แก่ :
(a) ใช้ dynamic SQL ในขั้นตอนการจัดเก็บที่ได้รับผลกระทบ
(b) สร้าง stub CREATE PROCEDURE
โดยที่ไม่มีสิ่งใดอยู่แล้วเรียกใช้ส่วนที่เหลือของสคริปต์จากนั้นเรียกใช้ส่วนALTER PROCEDURE
ที่มีเนื้อหาจริง (ในสาระสำคัญปรับใช้ขั้นตอนในสองขั้นตอน)
(c) ทำให้เครื่องมือการปรับใช้ของคุณฉลาดขึ้นเกี่ยวกับลำดับของการดำเนินการ หากการเปลี่ยนแปลงตารางจำเป็นต้องมีฟังก์ชั่นให้สคริปต์การเปลี่ยนแปลงเหล่านั้นล่าสุด เครื่องมือเปรียบเทียบ Schema เช่น SQL Compare ของ RedGate ค่อนข้างดีเกี่ยวกับการสร้างสคริปต์ให้คุณตามลำดับการพึ่งพาที่เหมาะสม คุณไม่ได้พูดถึงเครื่องมือใดที่คุณใช้ แต่ถ้ามันไม่ทำเช่นนี้ ...
(d) Martin Smith มีวิธีแก้ปัญหาที่น่าสนใจที่นี่แต่ฉันไม่ได้เล่นด้วย