SQL सर्वर में संग्रहीत कार्यविधि बनाते समय, आपको उन तालिकाओं को संदर्भित करने की अनुमति होती है जो मौजूद नहीं हैं। लेकिन, यदि तालिका मौजूद नहीं है, तो प्रक्रिया में आपके द्वारा निर्दिष्ट कोई भी कॉलम उस तालिका में मौजूद होना चाहिए ( हटाए गए नाम समाधान )।
क्या SQL सर्वर को निर्देश देना संभव है कि वे चाहे मौजूद हों या नहीं, एक प्रक्रिया में संदर्भित सभी तालिकाओं के नाम रिज़ॉल्यूशन को टाल दें। मैं सामान्य वाक्यविन्यास जाँच रखना चाहता हूँ, इसलिए यदि संभव हो, तो सिस्टम तालिका में संग्रहीत कार्यविधि परिभाषा को हैक करना एक विकल्प नहीं है।
मुझे उम्मीद है कि ऐसा करने के लिए मेरा पूछना थोड़ा अजीब लग सकता है , इसलिए यहां कुछ पृष्ठभूमि है: मैं ऑटो सी # में लिखे गए एप्लिकेशन से तालिका की परिभाषाएं और संग्रहीत प्रक्रियाएं उत्पन्न करता हूं और मेरे लिए एसक्यूएल जरूरतों के रूप में बदलाव के लिए कोड को बदलना बहुत मुश्किल है। उन्हें। मेरा कोड "गारंटी" देता है कि स्कीमा एक लेन-देन के अनुरूप है, लेकिन वर्तमान में मैं यह गारंटी नहीं दे सकता कि स्टोर किए गए कार्यविधियों को परिभाषित करने से पहले टेबल कॉलम परिभाषित किए गए हैं जो उन्हें संदर्भित करते हैं।
नीचे C # द्वारा बनाई गई SQL का एक विहित उदाहरण है जो उस समस्या को "दिखाता है" जिसे मैं हल करने की कोशिश कर रहा हूं।
--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
यह है मुझे सी # कोड में इसे ठीक करने के लिए संभव है, लेकिन मैं एक साधारण "जादू" tweak मैं एसक्यूएल में खींच सकते हैं के लिए उम्मीद कर रहा हूँ। यह मेरे लिए बहुत समय बचाएगा ।