sql >> Databáze >  >> RDS >> Sqlserver

Získejte hraniční hodnoty pro dělenou tabulku v SQL Server (T-SQL)

V SQL Server můžete použít sys.partition_range_values zobrazení systémového katalogu, abyste zjistili hraniční hodnoty používané pro dělenou tabulku.

Musíte však znát function_id před použitím tohoto zobrazení.

Ale jako vždy můžete spustit spojení proti hromadě dalších stolů, abyste získali požadované informace.

sys.partition_range_values

Nejprve se podívejme, jaké sloupce jsou sys.partition_range_values zobrazení se vrátí.

 SELECT * FROM sys.partition_range_values;

Výsledek:

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

Naštěstí pro mě mám v této databázi pouze jednu rozdělenou tabulku, takže nejsem bombardován výsledky.

Jak již bylo zmíněno, toto zobrazení vrací function_id , takže to můžeme použít k připojení mnoha dalších tabulek, abychom mohli vrátit data pro konkrétní tabulku.

V mém případě je to zbytečné, protože existuje pouze jedna rozdělená tabulka, ale předpokládejme, že máte spoustu rozdělených hald a indexů a chcete to jen zúžit.

Zúžit to na tabulku

Zde je příklad vrácení hraničních rozsahů pro konkrétní tabulku s názvem 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;

Výsledek:

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

Tady je to znovu, ale rozšiřujeme výběrový seznam o další informace, jako je název indexu, název funkce oddílu atd.

 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;

Výsledek:

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

Zde je výsledek opět pomocí vertikálního výstupu (takže se nemusíte posouvat do stran):

-[ 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. Rails 4 LIKE dotaz - ActiveRecord přidává uvozovky

  2. Detekce cyklů s rekurzivním faktoringem poddotazů

  3. Kontrola, zda je třeba aktualizovat sloupec bez LOB

  4. Datatyp Oracle Date, transformovaný na 'YYYY-MM-DD HH24:MI:SS TMZ' prostřednictvím SQL