Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận các giá trị ranh giới cho một bảng được phân vùng trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể sử dụng sys.partition_range_values chế độ xem danh mục hệ thống để tìm ra các giá trị ranh giới được sử dụng cho một bảng được phân vùng.

Tuy nhiên, bạn cần biết function_id của chức năng phân vùng trước khi bạn sử dụng dạng xem đó.

Nhưng như mọi khi, bạn có thể chạy một phép nối với một loạt các bảng khác để có được thông tin mong muốn.

sys.partition_range_values

Đầu tiên, hãy xem sys.partition_range_values có những cột nào xem lợi nhuận.

 SELECT * FROM sys.partition_range_values;

Kết quả:

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

May mắn thay cho tôi, tôi chỉ có một bảng được phân vùng trong cơ sở dữ liệu này, vì vậy tôi không phải lo lắng về kết quả.

Như đã đề cập, dạng xem này trả về function_id , vì vậy chúng tôi có thể sử dụng nó để nối một loạt các bảng khác, để chúng tôi có thể trả về dữ liệu cho một bảng cụ thể.

Trong trường hợp của tôi, điều này là thừa, vì chỉ có một bảng được phân vùng, nhưng giả sử bạn có rất nhiều chỉ mục và đống được phân vùng và bạn chỉ muốn thu hẹp nó.

Thu hẹp nó thành một bảng

Dưới đây là một ví dụ về việc trả lại các phạm vi ranh giới cho một bảng cụ thể có tên là 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;

Kết quả:

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

Đây là một lần nữa, nhưng chúng tôi mở rộng danh sách lựa chọn để bao gồm các thông tin khác, chẳng hạn như tên chỉ mục, tên của chức năng phân vùng, v.v.

 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;

Kết quả:

+---------+------------------------------+--------------------+-------------------------+---------------+------------------+
| 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             |
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+

Đây là kết quả một lần nữa bằng cách sử dụng đầu ra dọc (vì vậy bạn không phải cuộn sang ngang):

-[ 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. Sử dụng XEvent Profiler để nắm bắt các truy vấn trong SQL Server

  2. Làm cách nào để lấy phần số từ một chuỗi bằng T-SQL?

  3. Cập nhật hàng loạt trong C #

  4. Làm cách nào để bạn thay đổi kiểu dữ liệu của một cột trong SQL Server?

  5. Làm cách nào để tạo một ràng buộc duy nhất cũng cho phép null?