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

Vrátit všechny řádky z konkrétního oddílu v SQL Server (T-SQL)

Když vytvoříte dělenou tabulku na serveru SQL Server, určíte, které hodnoty jdou do každého oddílu.

To se provádí při vytváření funkce oddílu. Když vytváříte funkci oddílu, zadáváte hraniční hodnoty, které určují, které hodnoty vstoupí do každého oddílu.

Jakmile vytvoříte rozdělenou tabulku a vložíte data, můžete spustit normální SELECT příkaz k vrácení dat, stejně jako byste to udělali s nerozdělenou tabulkou (ve skutečnosti i nerozdělené tabulky mají jednu oblast).

Věděli jste ale, že můžete také určit, ze kterého oddílu chcete data?

Můžete to udělat pomocí $PARTITION systémové funkce ve vašem WHERE doložka.

Příklad

Představte si, že máme rozdělenou tabulku, která obsahuje následující data:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

A CatId je rozdělovací sloupec.

A k vytvoření jeho oddílů jsme použili následující funkci oddílu:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 5, 100);

To nám říká, jak jsou data uložena, podle hodnot ve sloupci rozdělení.

Nyní tedy můžeme spustit dotaz, který vrací data pouze z konkrétního oddílu.

Vrátit data z druhého oddílu

Zde je návod, jak můžeme vrátit všechny řádky z druhého oddílu.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;

Výsledek:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
+---------+-------------+

Vrátit data ze třetího oddílu

A zde jsou všechna data ze třetího oddílu.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;

Výsledek:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 6       | Sharp     |
| 7       | Fritz     |
| 8       | Garfield  |
| 9       | Boss      |
+---------+-----------+

Vrátit data z prvního a posledního oddílu

V tomto případě je můj první oddíl prázdný, protože CatId neobsahuje žádné záporné hodnoty sloupec.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;

Výsledek:

(0 rows affected)

Podobně je i poslední oddíl prázdný, protože není dostatek řádků k naplnění tohoto oddílu.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;

Výsledek:

(0 rows affected)

To je v souladu s doporučením společnosti Microsoft ponechat první a poslední oddíl prázdný, aby se zabránilo jakémukoli přesunu dat v případě, že budou oddíly v budoucnu rozděleny nebo sloučeny.


  1. SQL Server Jedinečný složený klíč dvou polí s automatickým přírůstkem druhého pole

  2. Entity Framework 6 s Npgsql

  3. Aktualizace profilu pošty databáze v SQL Server (T-SQL)

  4. Jak zajistit, aby vaše přístupové databáze byly ultra rychlé!