Partilhar via


$PARTITION (Transact-SQL)

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

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

Transact-SQL convenções de sintaxe

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 contra a 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 devolução

int

Comentários

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

$PARTITION retorna o número da 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

Um. Obter o número da partição para um conjunto de valores de coluna de particionamento

Este exemplo cria uma função de partição RangePF1 usando RANGE LEFT que particionará 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 no 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 uma tabela ou índice particionado

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

Observação

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

  1. Crie 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. Estas linhas são inseridas em partições com base na função de partição RangePF1 definição: 1 e 10 ir para particionar 1, enquanto 500 e 1000 ir 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 CONTAGEM
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 uma tabela ou índice particionado

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