Compartilhar via


$PARTITION (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Retorna o número de partição no qual um conjunto de valores de coluna de particionamento pode ser mapeado para qualquer função de partição especificada.

Convenções de sintaxe de Transact-SQL

Sintaxe

[ database_name. ] $PARTITION.partition_function_name(expression)

Argumentos

database_name

O nome do banco de dados que contém a função de partição.

partition_function_name

O nome de qualquer função de partição existente na qual um conjunto de valores de coluna de particionamento está sendo aplicado.

expressão

Uma expressão cujo tipo de dados deve corresponder ou ser implicitamente conversível para o tipo de dados de sua coluna de particionamento correspondente. Esse parâmetro também pode ser o nome de uma coluna de particionamento que atualmente participa do partition_function_name.

Tipos de retorno

int

Comentários

$PARTITION retorna um valor int entre 1 e o número de partições da função de partição.

$PARTITION retorna o número de partição para qualquer valor válido, independentemente de o valor existir atualmente em uma tabela particionada ou índice que usa a função de partição.

Exemplos

a. Obter o número de partições para um conjunto de valores de coluna de particionamento

O exemplo a seguir cria uma função de partição RangePF1 usando RANGE LEFT que dividirá uma tabela ou índice em quatro partições. $PARTITION é usado para determinar que o valor 10, representando a coluna de particionamento de RangePF1, seria colocado em 1 de partição da tabela.

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

SELECT $PARTITION.RangePF1 (10);
GO

B. Obter o número de linhas em cada partição não vazia de um índice ou tabela particionada

Este exemplo mostra como usar $PARTITION para retornar o número de linhas em cada partição de tabela que contém dados.

Observação

Para executar este exemplo, primeiro você deverá criar a função de partição RangePF1 usando o código no exemplo anterior.

  1. Criar um esquema de partição, RangePS1, para a função de partição RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Crie uma tabela, dbo.PartitionTable, no esquema de partição RangePS1 com col1 como a coluna de particionamento.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Insira quatro linhas na tabela dbo.PartitionTable. Essas linhas são inseridas em partições com base na função de partição RangePF1 definição: 1 e 10 vão para 1de partição, enquanto 500 e 1000 vão para 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Consulte o dbo.PartitionTable e usa $PARTITION.RangePF1(col1) na cláusula GROUP BY para consultar o número de linhas em cada partição que contém dados.

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

Aqui está o conjunto de resultados.

Partição COUNT
1 2
3 2

As linhas não são retornadas para o número de partição 2, que existe, mas não contém dados.

C. Retornar todas as linhas de uma partição de um índice ou tabela particionada

O exemplo a seguir retorna todas as linhas que estão na partição 3 da tabela PartitionTable.

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

Aqui está o conjunto de resultados.

col1 col2
500 outra linha
1000 outra linha