हम सभी जानते हैं कि SQL उपयोगकर्ता परिभाषित तालिका मूल्य तालिका प्रकार (यूडीटी) को आश्रित/निर्भरता होने पर नहीं छोड़ा जा सकता है। सही।एसक्यूएल उपयोगकर्ता परिभाषित तालिका प्रकार: यदि पैरामीटर के रूप में उपयोग नहीं किया जाता है तो हम उन्हें क्यों छोड़ सकते हैं?
लेकिन, आज मैंने एक को छोड़ दिया, भले ही उनके पास आश्रित हों। केवल मानदंड यह है कि उन्हें डीबी ऑब्जेक्ट्स जैसे प्रोसेस या फनक के पैरामीटर के रूप में उपयोग नहीं किया जाना चाहिए। के रूप में यह एक proc के अंदर इस्तेमाल और एक पैरामीटर नहीं है
CREATE TYPE FooUDT AS TABLE
(
ID int NOT NULL
)
निर्भर
CREATE PROCEDURE Bar
as
BEGIN
DECLARE @Identifier FooUDT
--Some operations on @Identifier
END
GO
FooUDT
छोड़ा जा सकता है। लेकिन इसके बाद इसे गिराया नहीं जा सकता है।
CREATE PROCEDURE Bar
@Identifier FooUDT readonly
as
BEGIN
--Some operations on @Identifier
END
GO
अधिक रूचिकर है कि दोनों ही मामलों में, अगर हम निर्भरता जाँच, दोनों एक दूसरे नाम दिखाएगा है। फिर भी पूर्व मामले को छोड़ दिया जा सकता है लेकिन उत्तरार्द्ध नहीं। यह क्यों? या क्या मैं कुछ न कुछ भूल रहा हूं?
टी-एसक्यूएल का सबसे बड़ा गलतफहमी जिसे [स्थगित नाम संकल्प] के रूप में जाना जाता है (https : //technet.microsoft.com/library/ms190686)। –
@ जेरोमेनमोस्टर्ट: यूडीटी के साथ इसकी अलग-अलग। यदि यूडीटी गुम है और वाक्यविन्यास सही है, तो proc भी नहीं बनाया गया है। –
मुझे पता था कि मुझे "स्थगित संकलन" को "स्थगित नाम समाधान" में नहीं बदला जाना चाहिए था। लेकिन विचार वही है: किसी भी चीज के लिए जो टेबल नहीं है, सिंटैक्स पार्स किया गया है और प्रक्रिया तब तक नहीं बनाई जाती जब तक कि सभी ऑब्जेक्ट मौजूद न हों। लेकिन फिर भी आप टी-एसक्यूएल शिकायत किए बिना उन वस्तुओं को छोड़ने के लिए स्वतंत्र हैं, क्योंकि संकलन अभी भी स्थगित है। स्थगित संकलन संग्रहीत प्रक्रिया के मेटाडेटा पर लागू नहीं होता है, केवल इसके कथन के लिए, यही कारण है कि यदि आप पैरामीटर के रूप में उपयोग किया जाता है तो आप यूडीटी को नहीं छोड़ सकते हैं। –