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

Разберете дали дадена таблица е разделена в SQL Server (T-SQL)

Ако трябва да разберете дали дадена таблица е била разделена в SQL Server, можете да изпълните присъединяване срещу sys.tables , sys.indexes и sys.partition_schemes изгледи.

Пример

Ето пример за демонстрация.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id
WHERE t.name = 'Movies';

Резултат:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

Тук отново се използва вертикален изход (така че да не се налага да превъртате настрани):

Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
type_desc        | CLUSTERED
is_primary_key   | 1
Partition Scheme | MoviesPartitionScheme

Връщам само малка част от действителните колони, но не се колебайте да върнете колоните, които ви интересуват.

Освен това можете да премахнете последния ред, за да върнете всички разделени таблици.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id;

Резултат:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

В моя случай има само една разделена таблица в базата данни.

Само за да е ясно, това връща само таблици, които са били изрично разделени.

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

Можете също да заявите други изгледи, като sys.partitions и sys.dm_db_partition_stats за да върнете списък с дяловете за всяка таблица.

Обърнете внимание, че и двата изгледа също ще връщат таблици, които не са изрично разделени (т.е. имат само един дял). В SQL Server таблиците и изгледите, които не са били изрично разделени, все още имат дял (partition_number =1).

Ето пример за sys.dm_db_partition_stats :

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Резултат:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

Ето пример, в който връщам информацията за дяла за неразделена таблица.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');

Резултат:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 3           |
+--------------------+-------------+

Както споменахме, той все още има един дял и неговия partition_number е 1 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате SQLOPS на Mac

  2. Как да създадете таблица с ограничение на външния ключ в SQL Server - SQL Server / TSQL урок, част 66

  3. Как да създадете таблица от резултат от заявка за избор в SQL Server 2008

  4. Грешка JDBC на SQL Server на Java 8:Драйверът не можа да установи защитена връзка със SQL Server чрез използване на криптиране на Secure Sockets Layer (SSL)

  5. Как да получите числовата част от низ с помощта на T-SQL?