$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çãoRangePF1
. - Cria uma tabela,
dbo.PartitionTable
, no esquema de partiçãoRangePS1
comcol1
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: