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

SQL सर्वर (T-SQL) में विभाजित तालिका के लिए सीमा मान प्राप्त करें

SQL सर्वर में, आप sys.partition_range_values . का उपयोग कर सकते हैं विभाजन तालिका के लिए उपयोग किए जाने वाले सीमा मानों का पता लगाने के लिए सिस्टम कैटलॉग दृश्य।

हालांकि, आपको function_id . जानना होगा उस दृश्य का उपयोग करने से पहले विभाजन फ़ंक्शन का।

लेकिन हमेशा की तरह, वांछित जानकारी प्राप्त करने के लिए आप अन्य तालिकाओं के समूह के विरुद्ध एक जुड़ाव चला सकते हैं।

sys.partition_range_values

सबसे पहले, आइए देखें कि sys.partition_range_values . में कौन से कॉलम हैं रिटर्न देखें।

 SELECT * FROM sys.partition_range_values;

परिणाम:

+---------------+---------------+----------------+---------+
| function_id   | boundary_id   | parameter_id   | value   |
|---------------+---------------+----------------+---------|
| 65542         | 1             | 1              | -1      |
| 65542         | 2             | 1              | 100     |
| 65542         | 3             | 1              | 10000   |
+---------------+---------------+----------------+---------+

सौभाग्य से मेरे लिए, मेरे पास इस डेटाबेस में केवल एक विभाजित तालिका है, इसलिए मैं परिणामों के साथ बमबारी नहीं कर रहा हूं।

जैसा कि बताया गया है, यह दृश्य function_id लौटाता है , इसलिए हम इसका उपयोग अन्य तालिकाओं के समूह में शामिल होने के लिए कर सकते हैं, ताकि हम किसी विशिष्ट तालिका के लिए डेटा वापस कर सकें।

मेरे मामले में यह अनावश्यक है, क्योंकि केवल एक विभाजित तालिका है, लेकिन मान लीजिए कि आपके पास बहुत सारे विभाजित ढेर और अनुक्रमणिका हैं, और आप इसे कम करना चाहते हैं।

इसे एक टेबल तक सीमित करें

Movies . नामक एक विशिष्ट तालिका के लिए सीमा सीमाओं को वापस करने का एक उदाहरण यहां दिया गया है .

SELECT 
    p.partition_number,
    r.boundary_id, 
    r.value AS [Boundary Value]   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE i.type <= 1 AND t.name = 'Movies' 
ORDER BY p.partition_number ASC;

परिणाम:

+--------------------+---------------+------------------+
| partition_number   | boundary_id   | Boundary Value   |
|--------------------+---------------+------------------|
| 1                  | 1             | -1               |
| 2                  | 2             | 100              |
| 3                  | 3             | 10000            |
| 4                  | NULL          | NULL             |
+--------------------+---------------+------------------+

यहां यह फिर से है, लेकिन हम अन्य जानकारी, जैसे अनुक्रमणिका नाम, विभाजन फ़ंक्शन का नाम इत्यादि शामिल करने के लिए चयन सूची का विस्तार करते हैं।

 SELECT 
    t.name AS [Table], 
    i.name AS [Index], 
    p.partition_number,
    f.name,
    r.boundary_id, 
    r.value AS [Boundary Value]   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE i.type <= 1 AND t.name = 'Movies' 
ORDER BY p.partition_number ASC;

परिणाम:

+---------+------------------------------+--------------------+-------------------------+---------------+------------------+
| Table   | Index                        | partition_number   | name                    | boundary_id   | Boundary Value   |
|---------+------------------------------+--------------------+-------------------------+---------------+------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | 1                  | MoviesPartitionFunction | 1             | -1               |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 2                  | MoviesPartitionFunction | 2             | 100              |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 3                  | MoviesPartitionFunction | 3             | 10000            |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 4                  | MoviesPartitionFunction | NULL          | NULL             |
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+

वर्टिकल आउटपुट का उपयोग करके फिर से यह परिणाम दिया गया है (ताकि आपको साइड में स्क्रॉल न करना पड़े):

-[ RECORD 1 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 1
name             | MoviesPartitionFunction
boundary_id      | 1
Boundary Value   | -1
-[ RECORD 2 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 2
name             | MoviesPartitionFunction
boundary_id      | 2
Boundary Value   | 100
-[ RECORD 3 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 3
name             | MoviesPartitionFunction
boundary_id      | 3
Boundary Value   | 10000
-[ RECORD 4 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 4
name             | MoviesPartitionFunction
boundary_id      | NULL
Boundary Value   | NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या LINQ के साथ पूर्ण पाठ खोज (FTS) का उपयोग करना संभव है?

  2. SQL सर्वर में डेटाटाइम फ़ील्ड का डिफ़ॉल्ट मान टाइमस्टैम्प में जोड़ें

  3. SQL सर्वर (T-SQL) में एक विशिष्ट विभाजन से सभी पंक्तियों को वापस करें

  4. SQL सर्वर लॉकिंग की मुख्य अवधारणा

  5. केवल एक पंक्ति सम्मिलित करना यदि वह पहले से मौजूद नहीं है