$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.
Criar um esquema de partição,
RangePS1
, para a função de partiçãoRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Crie uma tabela,
dbo.PartitionTable
, no esquema de partiçãoRangePS1
comcol1
como a coluna de particionamento.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Insira quatro linhas na tabela
dbo.PartitionTable
. Essas linhas são inseridas em partições com base na função de partiçãoRangePF1
definição:1
e10
vão para1
de partição, enquanto500
e1000
vão para3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Consulte o
dbo.PartitionTable
e usa$PARTITION.RangePF1(col1)
na cláusulaGROUP 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 |