@table
सिंटैक्स एक तालिका चर बनाता है (tempdb
. में एक वास्तविक तालिका) ) और इसके परिणामों को अमल में लाता है।
WITH
सिंटैक्स सामान्य तालिका अभिव्यक्ति
को परिभाषित करता है जो भौतिक नहीं है और केवल एक इनलाइन दृश्य है।
अधिकांश समय आप दूसरे विकल्प का उपयोग करना बेहतर समझते हैं। आप उल्लेख करते हैं कि यह एक समारोह के अंदर है। यदि यह एक TVF है तो अधिकांश समय आप चाहते हैं कि ये मल्टी स्टेटमेंट के बजाय इनलाइन हों ताकि इन्हें ऑप्टिमाइज़र द्वारा विस्तारित किया जा सके - यह तुरंत तालिका चर के उपयोग को अस्वीकार कर देगा।
हालांकि कभी-कभी (मान लें कि अंतर्निहित क्वेरी महंगी है और आप इसे कई बार निष्पादित होने से बचाना चाहते हैं) आप यह निर्धारित कर सकते हैं कि मध्यवर्ती परिणामों को अमल में लाने से कुछ विशिष्ट मामलों में प्रदर्शन में सुधार होता है। वर्तमान में कोई रास्ता नहीं CTEs के लिए इसे बाध्य करने के लिए (बिना किसी योजना गाइड को बाध्य किए कम से कमए> )
उस स्थिति में आपके पास (सामान्य रूप से) 3 विकल्प होते हैं। एक @tablevariable
, #localtemp
तालिका और एक ##globaltemp
मेज़। हालांकि इनमें से केवल पहले को ही किसी फ़ंक्शन के अंदर उपयोग करने की अनुमति है।
तालिका चर और #temp तालिकाओं के बीच अंतर के बारे में अधिक जानकारी के लिए यहां देखें ।