Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на всички редове от конкретен дял в SQL Server (T-SQL)

Когато създавате разделена таблица в SQL Server, вие посочвате кои стойности влизат във всеки дял.

Това се прави, когато създавате функцията за дял. Когато създавате функцията за дял, вие посочвате гранични стойности, които определят кои стойности влизат във всеки дял.

След като създадете вашата разделена таблица и сте вмъкнали данни, можете да изпълните нормален SELECT оператор за връщане на данни, точно както бихте направили с неразделена таблица (всъщност дори неразделените таблици имат един дял).

Но знаете ли, че можете също да посочите от кой дял искате данни?

Можете да направите това с помощта на $PARTITION системна функция във вашия WHERE клауза.

Пример

Представете си, че имаме разделена таблица, която съдържа следните данни:

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

И CatId е разделителната колона.

И ние използвахме следната функция за дялове, за да създадем нейните дялове:

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

Това ни казва как се съхраняват данните според стойностите в колоната за разделяне.

Така че вече можем да изпълним заявка, която връща данни само от конкретен дял.

Върнете данни от втория дял

Ето как можем да върнем всички редове от втория дял.

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

Резултат:

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

Връщане на данни от третия дял

И ето всички данни от третия дял.

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

Резултат:

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

Връщане на данни от първия и последния дял

В този случай първият ми дял е празен, защото няма отрицателни стойности в CatId колона.

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

Резултат:

(0 rows affected)

По същия начин последният дял също е празен, тъй като няма достатъчно редове за попълване на този дял.

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

Резултат:

(0 rows affected)

Това се придържа към препоръката на Microsoft за оставяне на първия и последния дял празни, за да се избегне всяко движение на данни в случай, че дяловете бъдат разделени или обединени в бъдеще.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да избера от списък със стойности в SQL Server

  2. Как да се справим с имената на колони в SQL, които изглеждат като SQL ключови думи?

  3. Функция срещу съхранена процедура в SQL Server

  4. Какви ресурси съществуват за настройка на производителността на базата данни?

  5. Статистика на базата данни за актуализиране на SQL Server