क्या आपने कभी एक संग्रहीत कार्यविधि चलाई है, केवल लौटाए गए स्तंभों की संख्या पर अभिभूत होने के लिए? हो सकता है कि आपको केवल एक या दो स्तंभों की आवश्यकता हो, लेकिन इसने आपको रास्ता . के साथ प्रस्तुत किया इस विशेष अवसर पर आपकी आवश्यकताओं के लिए बहुत अधिक कॉलम।
सौभाग्य से, एक छोटी सी चाल है जिसका उपयोग आप संग्रहीत कार्यविधि से चयनित स्तंभों को पुनः प्राप्त करने के लिए कर सकते हैं। यह आपको केवल आवश्यक कॉलम प्राप्त करने में सक्षम बनाता है।
और सबसे अच्छी बात यह है कि इसमें अस्थायी टेबल बनाना और डेटा को इधर-उधर करना शामिल नहीं है।
आपको बस अपनी संग्रहित प्रक्रिया को OPENROWSET()
. पर पास करना है समारोह।
इसी अवधारणा को OPENQUERY()
. पर लागू किया जा सकता है समारोह।
उदाहरण
sp_columns
लें उदाहरण के लिए सिस्टम संग्रहीत प्रक्रिया। यह 19 कॉलम देता है।
EXEC sp_columns Cats;
परिणाम:
+-------------------+---------------+--------------+---------------+-------------+--------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | DATA_TYPE | TYPE_NAME | PRECISION | LENGTH | SCALE | RADIX | NULLABLE | REMARKS | COLUMN_DEF | SQL_DATA_TYPE | SQL_DATETIME_SUB | CHAR_OCTET_LENGTH | ORDINAL_POSITION | IS_NULLABLE | SS_DATA_TYPE | |-------------------+---------------+--------------+---------------+-------------+--------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------| | Pets | dbo | Cats | CatId | 4 | int identity | 10 | 4 | 0 | 10 | 0 | NULL | NULL | 4 | NULL | NULL | 1 | NO | 56 | | Pets | dbo | Cats | CatName | 12 | varchar | 60 | 60 | NULL | NULL | 1 | NULL | NULL | 12 | NULL | 60 | 2 | YES | 39 | +-------------------+---------------+--------------+---------------+-------------+--------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+
इस तरह की प्रक्रियाओं के लिए अक्सर हमें अपनी रुचि के स्तंभों को खोजने के लिए जंगली हंसों का पीछा करते हुए बग़ल में स्क्रॉल करने की आवश्यकता होती है।
शायद हम सभी 19 के बजाय केवल 4 विशिष्ट कॉलम देखना चाहते हैं।
ऐसा करने के लिए हम निम्न क्वेरी चला सकते हैं।
SELECT
c.COLUMN_NAME,
c.TYPE_NAME,
c.PRECISION,
c.LENGTH
FROM OPENROWSET(
'SQLOLEDB',
'SERVER=localhost;Trusted_Connection=yes;',
'EXEC Pets.dbo.sp_columns Cats'
) c;
परिणाम:
+---------------+--------------+-------------+----------+ | COLUMN_NAME | TYPE_NAME | PRECISION | LENGTH | |---------------+--------------+-------------+----------| | CatId | int identity | 10 | 4 | | CatName | varchar | 60 | 60 | +---------------+--------------+-------------+----------+
OPENROWSET()
फ़ंक्शन को मुख्य रूप से दूरस्थ डेटा प्राप्त करने के लिए डिज़ाइन किया गया था, लेकिन आप इसे localhost
निर्दिष्ट करके स्थानीय उदाहरण पर भी उपयोग कर सकते हैं। कनेक्शन स्ट्रिंग में (जैसे मैंने इस उदाहरण में किया है)।
OPENQUERY() फ़ंक्शन
जैसा कि उल्लेख किया गया है, उसी अवधारणा को OPENQUERY()
. पर लागू किया जा सकता है समारोह।
SELECT
c.COLUMN_NAME,
c.TYPE_NAME,
c.PRECISION,
c.LENGTH
FROM OPENQUERY(
Homer,
'EXEC Pets.dbo.sp_columns Cats'
) c;
परिणाम:
+---------------+--------------+-------------+----------+ | COLUMN_NAME | TYPE_NAME | PRECISION | LENGTH | |---------------+--------------+-------------+----------| | CatId | int identity | 10 | 4 | | CatName | varchar | 60 | 60 | +---------------+--------------+-------------+----------+
इस मामले में, मैंने Homer
. नामक एक लिंक किए गए सर्वर को निर्दिष्ट किया है स्थानीय सर्वर के बजाय।
यदि आपको एक त्रुटि मिलती है जो कहती है कि "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं किया गया है", तो आपको सर्वर के लिए डेटा एक्सेस सक्षम करने की आवश्यकता होगी, भले ही आप अपने स्थानीय इंस्टेंस को क्वेरी कर रहे हों। इसे कैसे करें, इस पर निर्देशों के लिए डेटा एक्सेस को सक्षम/अक्षम करने का तरीका देखें।