Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में किसी ऑब्जेक्ट नाम के भाग को वापस करने के लिए PARSENAME() का उपयोग करें

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()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर डेटाबेस में प्राथमिक कुंजी बाधा के साथ या बिना सभी टेबल कैसे प्राप्त करें - एसक्यूएल सर्वर/टीएसक्यूएल ट्यूटोरियल 59

  2. माता-पिता और अनंत बच्चों को वापस करने के लिए कथन का चयन करें

  3. कई बार शामिल करें () का उपयोग करते समय एंटिटी-फ्रेमवर्क कोड धीमा होता है

  4. Azure डेटा स्टूडियो का उपयोग करके मैक पर SQL सर्वर डेटाबेस को कैसे पुनर्स्थापित करें

  5. SQL सर्वर - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 132 में ग्रुप बाय और क्लॉज का उपयोग करके डुप्लिकेट रिकॉर्ड कैसे खोजें?