SQL सर्वर में, आप PARSENAME()
. का उपयोग कर सकते हैं ऑब्जेक्ट नाम का हिस्सा वापस करने के लिए कार्य।
उदाहरण के लिए, आप इसका उपयोग चार भागों के नाम के स्कीमा भाग (या किसी अन्य भाग) को वापस करने के लिए कर सकते हैं जैसे server.schema.db.object
.
सिंटैक्स
वाक्य रचना इस प्रकार है:
PARSENAME ( 'object_name' , object_piece )
जहां object_name
(वैकल्पिक रूप से योग्य) वस्तु का नाम है और object_piece
वह हिस्सा है जिसे आप वापस करना चाहते हैं।
object_piece
तर्क एक int . होना चाहिए 1 और 4 के बीच। मान निर्धारित करता है कि वस्तु के नाम का कौन सा भाग वापस आना है। ये मान ऑब्जेक्ट भाग के अनुरूप हैं:
मान | ऑब्जेक्ट पार्ट |
---|---|
1 | वस्तु का नाम |
2 | स्कीमा नाम |
3 | डेटाबेस का नाम |
4 | सर्वर का नाम |
उदाहरण 1 - मूल उपयोग
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SELECT PARSENAME('Homer.dbo.Music.Artists', 4) AS Result;
परिणाम:
+----------+ | Result | |----------| | Homer | +----------+
इस मामले में मैंने सर्वर नाम को सर्वर, स्कीमा, डेटाबेस और टेबल नाम से युक्त चार भाग ऑब्जेक्ट नाम से वापस कर दिया।
उदाहरण 2 - सभी भागों को लौटाएं
अगर मैं सभी भागों को अलग-अलग लौटा दूं तो यह कैसा दिखता है।
DECLARE @object_name char(23) = 'Homer.dbo.Music.Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | Homer | dbo | Music | Artists | +----------+----------+------------+----------+
उदाहरण 3 - SQL सर्वर नाम की जांच नहीं करता है
यह जानना महत्वपूर्ण है कि PARSENAME()
यह इंगित नहीं करता है कि निर्दिष्ट नाम से कोई वस्तु मौजूद है या नहीं। यह दिए गए ऑब्जेक्ट नाम से केवल निर्दिष्ट भाग लौटाता है।
इसलिए, आप किसी भी मान को फ़ंक्शन में पास कर सकते हैं, जब तक कि यह मान्य sysname . है ।
DECLARE @object_name char(28) = 'completely.bogus.object.name'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+------------+----------+------------+----------+ | Server | Schema | Database | Object | |------------+----------+------------+----------| | completely | bogus | object | name | +------------+----------+------------+----------+
उदाहरण 4 - तीन-भाग वाली वस्तु का नाम
अगर मैं तीन-भाग वाला नाम पास कर दूं तो क्या होगा।
DECLARE @object_name char(17) = 'dbo.Music.Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | dbo | Music | Artists | +----------+----------+------------+----------+
उदाहरण 5 - दो-भाग वाली वस्तु का नाम
अगर मैं दो-भाग वाला नाम पास कर दूं तो यहां क्या होगा।
DECLARE @object_name char(13) = 'Music.Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | Music | Artists | +----------+----------+------------+----------+
उदाहरण 6 - एक-भाग वाली वस्तु का नाम
और, जैसा कि यह मूर्खतापूर्ण लग सकता है, एक-भाग का नाम।
DECLARE @object_name char(7) = 'Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | NULL | Artists | +----------+----------+------------+----------+
उदाहरण 7 - पांच-भाग वाली वस्तु का नाम
यदि आप किसी ऑब्जेक्ट का नाम चार से अधिक भागों के साथ प्रदान करते हैं तो यहां क्या होता है।
DECLARE @object_name char(23) = 'Oops.Homer.dbo.Music.Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+----------+ | Server | Schema | Database | Object | |----------+----------+------------+----------| | NULL | NULL | NULL | NULL | +----------+----------+------------+----------+
उदाहरण 8 - अन्य उपयोग
यह देखते हुए कि आप पूरी तरह से फर्जी ऑब्जेक्ट नाम प्रदान कर सकते हैं, PARSENAME()
IP4 पतों जैसे अन्य सीमांकित डेटा को विभाजित करने के लिए एक आसान हैक हो सकता है।
DECLARE @object_name char(15) = '172.217.167.110'; SELECT PARSENAME(@object_name, 4) AS [4], PARSENAME(@object_name, 3) AS [3], PARSENAME(@object_name, 2) AS [2], PARSENAME(@object_name, 1) AS [1];
परिणाम:
+-----+-----+-----+-----+ | 4 | 3 | 2 | 1 | |-----+-----+-----+-----| | 172 | 217 | 167 | 110 | +-----+-----+-----+-----+
हालांकि, अगर आपको वास्तव में ऐसा करने की ज़रूरत है, तो एक अलग विधि का उपयोग करने पर विचार करें, जैसे STRING_SPLIT()
।
उदाहरण 9 - अल्पविराम और अन्य सीमांकक
दिया गया PARSENAME()
ऑब्जेक्ट नामों के साथ उपयोग करने का इरादा है, आप अल्पविराम का उपयोग सीमांकक के रूप में नहीं कर सकते हैं और उम्मीद करते हैं कि यह वही काम करेगा।
अगर मैं ऐसा करने की कोशिश करता हूं तो यहां क्या होता है।
DECLARE @object_name char(23) = 'Homer,dbo,Music,Artists'; SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object];
परिणाम:
+----------+----------+------------+-------------------------+ | Server | Schema | Database | Object | |----------+----------+------------+-------------------------| | NULL | NULL | NULL | Homer,dbo,Music,Artists | +----------+----------+------------+-------------------------+
यदि आप ऐसा करना चाहते हैं तो आपको अल्पविराम को एक बिंदु से बदलना होगा, या किसी भिन्न विधि का उपयोग करना होगा, जैसे STRING_SPLIT()
।