เมื่อสร้างโพรซีเดอร์ที่เก็บไว้ใน SQL Server คุณจะได้รับอนุญาตให้อ้างถึงตารางที่ไม่มีอยู่ แต่ถ้าตารางนั้นมีอยู่คอลัมน์ใด ๆ ที่คุณอ้างถึงในขั้นตอนต้องมีอยู่ในตารางนั้น ( การแก้ปัญหาชื่อที่เลื่อนออกไป )
เป็นไปได้หรือไม่ที่จะสั่งให้ SQL Server เลื่อนการจำแนกชื่อของตารางทั้งหมดที่อ้างอิงในกระบวนการโดยไม่คำนึงว่ามีอยู่จริงหรือไม่? ฉันต้องการเก็บการตรวจสอบไวยากรณ์ทั่วไปดังนั้นแม้ว่าจะเป็นไปได้แฮ็คการนิยามโพรซีเดอร์ที่เก็บไว้ในตารางระบบไม่ใช่ตัวเลือก
ฉันคาดหวังว่าการขอทำสิ่งนี้อาจจะดูแปลก ๆดังนั้นนี่คือพื้นหลัง: ฉันสร้างคำจำกัดความของตารางโดยอัตโนมัติและขั้นตอนการจัดเก็บจากแอปพลิเคชันที่เขียนใน C # และมันยากมากสำหรับฉันที่จะเปลี่ยนรหัส พวกเขา รหัสของฉัน "รับประกัน" ว่าสคีมานั้นสอดคล้องกันในการทำธุรกรรม แต่ในปัจจุบันฉันไม่สามารถรับประกันได้ว่าจะมีการกำหนดคอลัมน์ตารางก่อนที่ฉันจะกำหนดขั้นตอนการจัดเก็บซึ่งอ้างอิงพวกเขา
ด้านล่างเป็นตัวอย่างที่ยอมรับได้ของ SQL ที่สร้างขึ้นโดย C # ซึ่ง "อธิบาย" ปัญหาที่ฉันพยายามแก้ไข
--Say this table already exists.
CREATE TABLE myTable
(
a NVARCHAR(MAX)
)
GO
--My C# code creates something like this
BEGIN TRAN
GO
--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
SELECT a,b FROM myTable
END
--then the table update
ALTER TABLE myTable
ADD b nvarchar(MAX)
COMMIT TRAN
มันเป็นไปได้สำหรับผมที่จะแก้ไขปัญหานี้ในรหัส C # แต่ฉันหวังว่าการที่เรียบง่าย "มายากล" ปรับแต่งผมสามารถดึงในการ SQL นี้จะประหยัดเวลาได้มากสำหรับฉัน