SQL सर्वर में आप sp_columns
. का उपयोग कर सकते हैं सिस्टम संग्रहीत प्रक्रिया निर्दिष्ट वस्तुओं के लिए कॉलम जानकारी वापस करने के लिए जिसे वर्तमान वातावरण में पूछताछ की जा सकती है। ऐसे ऑब्जेक्ट में टेबल, व्यू या अन्य ऑब्जेक्ट शामिल होते हैं जिनमें टेबल-वैल्यू फंक्शन जैसे कॉलम होते हैं।
आप किसी विशिष्ट कॉलम के लिए जानकारी प्राप्त कर सकते हैं, या आप किसी तालिका, दृश्य आदि से सभी कॉलम निर्दिष्ट कर सकते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ]
@table_name
तर्क ही आवश्यक तर्क है। यह उस टेबल/ऑब्जेक्ट का नाम है जिससे आप कॉलम की जानकारी चाहते हैं।
अन्य तर्क वैकल्पिक हैं। इन तर्कों के बारे में अधिक जानकारी के लिए, Microsoft दस्तावेज़ देखें।
इस संग्रहीत कार्यविधि के लिए SELECT
requires की आवश्यकता है और VIEW DEFINITION
स्कीमा पर अनुमतियाँ।
उदाहरण 1 - एक विशिष्ट कॉलम के लिए वापसी जानकारी
यह उदाहरण सभी संभावित तर्कों का उपयोग करता है। यह एक विशिष्ट तालिका में, एक विशिष्ट तालिका के मालिक से, एक विशिष्ट डेटाबेस में एक विशिष्ट कॉलम के लिए जानकारी देता है।
EXEC sp_columns @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location', @ODBCVer = 2;
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Application TABLE_NAME | Cities COLUMN_NAME | Location DATA_TYPE | -4 TYPE_NAME | geography PRECISION | 2147483647 LENGTH | 2147483647 SCALE | NULL RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 2147483647 ORDINAL_POSITION | 4 IS_NULLABLE | YES SS_DATA_TYPE | 23 (1 row affected)
इसे करने का एक और संक्षिप्त तरीका यहां दिया गया है:
EXEC sp_columns 'Cities', 'Application', 'WideWorldImporters', 'Location', 2;
यह वही परिणाम देता है।
उदाहरण 2 - केवल एक तालिका निर्दिष्ट करें
इस उदाहरण में मैं दूसरे डेटाबेस पर स्विच करता हूं और केवल तालिका का नाम निर्दिष्ट करता हूं।
USE Music; EXEC sp_columns @table_name = 'Artists';
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
Changed database context to 'Music'. -[ RECORD 1 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistId DATA_TYPE | 4 TYPE_NAME | int identity PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 -[ RECORD 2 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar PRECISION | 255 LENGTH | 510 SCALE | NULL RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39 -[ RECORD 3 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ActiveFrom DATA_TYPE | -9 TYPE_NAME | date PRECISION | 10 LENGTH | 20 SCALE | NULL RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 3 IS_NULLABLE | YES SS_DATA_TYPE | 0 (3 rows affected)
यह निर्दिष्ट तालिका में सभी स्तंभों के लिए जानकारी देता है।
हालांकि आपको सही डेटाबेस में होने की आवश्यकता है। अगर मैं पिछले उदाहरण को किसी भिन्न डेटाबेस पर फिर से चलाता हूं, तो मुझे कोई परिणाम नहीं मिलता है।
USE WideWorldImporters; EXEC sp_columns @table_name = 'Artists';
परिणाम:
Changed database context to 'WideWorldImporters'. (0 rows affected)
उदाहरण 3 - टेबल क्वालिफायर के बारे में
यदि आप @table_qualifier
प्रदान करते हैं तर्क, यह वर्तमान डेटाबेस के समान होना चाहिए। यदि ऐसा नहीं है, तो एक त्रुटि लौटा दी जाती है।
USE Music; EXEC sp_columns @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
परिणाम:
Msg 15250, Level 16, State 1, Line 24 The database name component of the object qualifier must be the name of the current database.
इस उदाहरण में मैंने "म्यूजिक" डेटाबेस पर स्विच किया, लेकिन फिर "वाइडवर्ल्ड इम्पोर्टर्स" के एक टेबल क्वालीफायर का उपयोग किया, जिसके परिणामस्वरूप त्रुटि Msg 15250 वापस आ गई।
इस मामले में, मुझे "संगीत" के टेबल क्वालिफायर का उपयोग करना चाहिए था। वैकल्पिक रूप से, मैं तर्क को पूरी तरह से छोड़ सकता था।
उदाहरण 4 - देखे जाने की संख्या
ऑब्जेक्ट प्रकार की परवाह किए बिना सिंटैक्स समान है। यहां एक दृश्य के लिए स्तंभ जानकारी प्राप्त करने का एक उदाहरण दिया गया है:
EXEC sp_columns @table_name = 'Customers', @table_owner = 'Website', @column_name = 'CustomerID';
परिणाम:
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Website TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56
यह किसी दृश्य के लिए स्तंभ जानकारी होता है।
इस स्थिति में, यदि मैं क्वेरी से तालिका स्वामी को छोड़ देता हूं, तो दो पंक्तियाँ वापस आ जाती हैं:
EXEC sp_columns @table_name = 'Customers', @column_name = 'CustomerID';
परिणाम:
-[ RECORD 1 ]------------------------- TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Sales TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | (NEXT VALUE FOR [Sequences].[CustomerID]) SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 -[ RECORD 2 ]------------------------- TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Website TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 (2 rows affected)
दो पंक्तियाँ लौटा दी जाती हैं क्योंकि "ग्राहक" नामक दो वस्तुएँ होती हैं। एक दृश्य है और दूसरा एक टेबल है। दृश्य के लिए तालिका स्वामी को "वेबसाइट" कहा जाता है, और तालिका के तालिका स्वामी को "बिक्री" कहा जाता है।
उदाहरण 5 - तालिका-मूल्यवान कार्य
जैसा कि उल्लेख किया गया है, आप तालिका-मूल्यवान फ़ंक्शन के लिए कॉलम जानकारी भी प्राप्त कर सकते हैं।
तालिका-मूल्यवान फ़ंक्शन के लिए कॉलम जानकारी प्राप्त करने का एक उदाहरण यहां दिया गया है। एक बार फिर, वाक्य रचना वही है।
EXEC sp_columns @table_name = 'DetermineCustomerAccess';
परिणाम:
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Application TABLE_NAME | DetermineCustomerAccess COLUMN_NAME | AccessResult DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56