Compartilhar via


$PARTITION (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Retorna o número de partição no qual um conjunto de valores de coluna de particionamento são mapeados 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 é aplicado.

expressão
É uma expressão cujo tipo de dados deve corresponder ou pode ser convertido implicitamente no tipo de dados de sua coluna de particionamento correspondente. expression também pode ser o nome de uma coluna de particionamento que participe atualmente de 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 um índice ou uma tabela particionada que use 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 se o valor 10, representando a coluna de particionamento de RangePF1, será colocado na partição 1 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.

O exemplo:

  • Cria um esquema de partição, RangePS1, para a função de partição RangePF1.
  • Cria uma tabela, dbo.PartitionTable, no esquema de partição RangePS1 com col1 a coluna particionamento.
  • Insere quatro linhas na tabela dbo.PartitionTable. Com base na definição da função de partição, essas linhas serão inseridas nas partições 2 e 3. As partições 1 e 4 permanecerão vazias.
  • Consulta dbo.PartitionTable e usa $PARTITION.RangePF1(col1) na cláusula GROUP BY para conferir o número de linhas em cada partição 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.

CREATE PARTITION SCHEME RangePS1  
    AS PARTITION RangePF1  
    ALL TO ('PRIMARY') ;  
GO  

CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))  
    ON RangePS1 (col1) ;  
GO

INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))


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

A consulta SELECT deve retornar os seguintes resultados:

Partição COUNT
2 1
3 3

As linhas não são retornadas para partições número 1 e 4, que existem, 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 ;  

A consulta deve retornar os seguintes resultados:

col1 col2
101 outra linha
500 uma terceira linha
501 uma quarta linha

Próximas etapas

Saiba mais sobre o particionamento de tabela nestes artigos: