sql >> Database teknologi >  >> RDS >> Sqlserver

Få grænseværdierne for en opdelt tabel i SQL Server (T-SQL)

I SQL Server kan du bruge sys.partition_range_values systemkatalogvisning for at finde ud af de grænseværdier, der bruges til en opdelt tabel.

Du skal dog kende function_id af partitionsfunktionen, før du bruger denne visning.

Men som altid kan du køre en join mod en masse andre borde for at få den ønskede information.

sys.partition_range_values

Lad os først se, hvilke kolonner sys.partition_range_values se afkast.

 SELECT * FROM sys.partition_range_values; 

Resultat:

+---------------+------------------- --+---------+| funktions-id | grænse_id | parameter_id | værdi ||----------------+-------------------- -+--------|| 65542 | 1 | 1 | -1 || 65542 | 2 | 1 | 100 || 65542 | 3 | 1 | 10000 |+------------------------------- -+---------+

Heldigvis for mig har jeg kun én opdelt tabel i denne database, så jeg bliver ikke bombarderet med resultater.

Som nævnt returnerer denne visning function_id , så vi kan bruge det til at forbinde en masse andre tabeller, så vi kan returnere data for en bestemt tabel.

I mit tilfælde er dette overflødigt, da der kun er én opdelt tabel, men lad os antage, at du har en hel masse opdelte dynger og indekser, og du vil bare indsnævre det.

Begræns det til en tabel

Her er et eksempel på returnering af grænseområderne for en specifik tabel kaldet 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; 

Resultat:

+---------------------+---------------+-------- ----------+| partitionsnummer | grænse_id | Grænseværdi ||---------------------+---------------------+-------- ----------|| 1 | 1 | -1 || 2 | 2 | 100 || 3 | 3 | 10.000 || 4 | NULL | NULL |+---------------------+---------------+-------- --------+

Her er det igen, men vi udvider valglisten til at inkludere andre oplysninger, såsom indeksnavnet, navnet på partitionsfunktionen osv.

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;

Resultat:

+--------+------------------------------+----- --------------+--------------------------------+-------- -------+-------------------------+| Tabel | Indeks | partitionsnummer | navn | grænse_id | Grænseværdi ||--------+-------------------------------------+----- --------------+--------------------------------+-------- -------+------------------|| Film | PK__Movies__4BD2941AD44D2FCF | 1 | MoviesPartitionFunction | 1 | -1 || Film | PK__Movies__4BD2941AD44D2FCF | 2 | MoviesPartitionFunction | 2 | 100 || Film | PK__Movies__4BD2941AD44D2FCF | 3 | MoviesPartitionFunction | 3 | 10.000 || Film | PK__Movies__4BD2941AD44D2FCF | 4 | MoviesPartitionFunction | NULL | NULL |+--------------------------- --------------+---------------------------------+--------- ------+------------------+

Her er resultatet igen ved at bruge lodret output (så du ikke behøver at rulle sidelæns):

-[ RECORD 1 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 1 navn | MoviesPartitionFunctionboundary_id | 1Grænseværdi | -1-[ REKORD 2 ]--------------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 2navn | MoviesPartitionFunctionboundary_id | 2Grænseværdi | 100-[ REKORD 3 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 3navn | MoviesPartitionFunctionboundary_id | 3Grænseværdi | 10000-[ REKORD 4 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 4navn | MoviesPartitionFunctionboundary_id | NULL grænseværdi | NULL


  1. Hvordan opretter man forbindelse til ekstern Oracle DB med PL/SQL-udvikler?

  2. Mønstermatchning:Mere sjov, da jeg var barn

  3. Kan ikke sende strengværdi 1,2 som input til en orakelforespørgsel

  4. Modellering af produktvarianter