Megosztás a következőn keresztül:


$PARTITION (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Azt a partíciószámot adja vissza, amelybe particionálási oszlopértékek készlete leképezhető bármely megadott partíciófüggvényhez.

Transact-SQL szintaxis konvenciói

Szintaxis

[ database_name. ] $PARTITION.partition_function_name(expression)

Érvek

database_name

A partíciófüggvényt tartalmazó adatbázis neve.

partition_function_name

Annak a meglévő partíciófüggvénynek a neve, amelyre particionálási oszlopértékek vannak alkalmazva.

kifejezés

Egy kifejezésnek, amelynek adattípusának meg kell egyeznie, vagy implicit módon konvertálhatónak kell lennie a megfelelő particionálási oszlop adattípusára. Ez a paraméter lehet egy particionálási oszlop neve is, amely jelenleg részt vesz a partition_function_name.

Visszatérési típusok

Megjegyzések

$PARTITION egy int értéket ad vissza a 1 és a partíciófüggvény partícióinak száma között.

$PARTITION bármely érvényes érték partíciószámát adja vissza, függetlenül attól, hogy az érték jelenleg létezik-e a partíciófüggvényt használó particionált táblában vagy indexben.

Példák

Egy. Particionálási oszlopértékek készletének partíciószámának lekérése

Ez a példa létrehoz egy partíciófüggvényt RangePF1RANGE LEFT használatával, amely négy partícióra particionál egy táblát vagy indexet. $PARTITION annak megállapítására szolgál, hogy a 10particionálási oszlopát képviselő RangePF1érték a tábla partíciós 1 kerül-e.

CREATE PARTITION FUNCTION RangePF1(INT)
    AS RANGE LEFT
    FOR VALUES (10, 100, 1000);
GO

SELECT $PARTITION.RangePF1 (10);
GO

B. A particionált tábla vagy index nem megfelelő partícióiban lévő sorok számának lekérése

Ez a példa bemutatja, hogyan használható $PARTITION az adatokat tartalmazó táblák egyes partícióiban lévő sorok számának visszaadására.

Jegyzet

A példa végrehajtásához először létre kell hoznia a partíciófüggvényt RangePF1 az előző példában szereplő kód használatával.

  1. Hozzon létre egy partíciós sémát RangePS1a RangePF1partíciófüggvényhez.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Hozzon létre egy táblát dbo.PartitionTablea RangePS1 partíciós sémában, col1 particionálási oszlopként.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Szúrjon be négy sort a dbo.PartitionTable táblába. Ezek a sorok a partíciófüggvény RangePF1 definíciója alapján kerülnek be a partíciókba: 1 és 10 a particionálási 1, 500 és 1000 pedig a 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. A dbo.PartitionTable lekérdezése és a $PARTITION.RangePF1(col1) záradék GROUP BY használatával kérdezi le az adatokat tartalmazó partíciók sorainak számát.

    SELECT $PARTITION.RangePF1 (col1) AS Partition,
           COUNT(*) AS [COUNT]
    FROM dbo.PartitionTable
    GROUP BY $PARTITION.RangePF1 (col1)
    ORDER BY Partition;
    GO
    

Itt van az eredményhalmaz.

Feloszt GRÓF
1 2
3 2

A rendszer nem ad vissza sorokat a 2partíciószámhoz, amely létezik, de nem tartalmaz adatokat.

C. Egy particionált tábla vagy index egy partíciójának összes sorát adja vissza

Az alábbi példa az PartitionTabletábla 3. partíciójában lévő összes sort adja vissza.

SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;

Itt van az eredményhalmaz.

col1 col2
500 másik sor
1000 másik sor