Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Cria uma função na base de dados atual que mapeia as linhas de uma tabela ou índice em partições com base nos valores de uma coluna especificada. Usar a FUNÇÃO CRIAR PARTIÇÃO é o primeiro passo na criação de uma tabela ou índice particionado. Uma tabela ou índice pode ter um máximo de 15.000 partições.
Transact-SQL convenções de sintaxe
Sintaxe
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]
Arguments
partition_function_name
É o nome da função de partição. Os nomes das funções de partição devem ser únicos dentro da base de dados e cumprir as regras para identificadores.
input_parameter_type
É o tipo de dado da coluna usada para particionamento. Todos os tipos de dados são válidos para utilização como colunas de partição, exceto texto, ntext, imagem, xml, timestamp, varchar(max),nvarchar(max), varbinary(max), tipos de dados alias ou tipos de dados CLR definidos pelo utilizador.
A coluna propriamente dita, conhecida como coluna de partição, é especificada na instrução CREATE TABLE ou CREATE INDEX.
boundary_value
Especifica os valores de fronteira para cada partição de uma tabela ou índice particionado que utiliza partition_function_name. Se boundary_value estiver vazio, a função de partição mapeia toda a tabela ou índice usando partition_function_name numa única partição. Apenas uma coluna de partição, especificada numa instrução CREATE TABLE ou CREATE INDEX, pode ser utilizada.
boundary_value é uma expressão constante que pode referenciar variáveis. Isto inclui variáveis de tipo definidas pelo utilizador, ou funções e funções definidas pelo utilizador. Não pode referenciar Transact-SQL expressões. boundary_value deve corresponder ou ser implicitamente convertível para o tipo de dados fornecido em input_parameter_type, e não pode ser truncado durante a conversão implícita de forma que o tamanho e a escala do valor não coincidam com os do seu input_parameter_type correspondente.
Observação
Se boundary_value consistir em literais datetime ou smalldatetime , estes literais são avaliados assumindo que us_english é a linguagem da sessão. Este comportamento está obsoleto. Para garantir que a definição da função de partição se comporta como esperado para todas as linguagens de sessão, recomendamos que utilize constantes interpretadas da mesma forma para todas as definições de linguagem, como o formato yyyymmdd; ou converter explicitamente literais para um estilo específico. Para determinar a sessão de linguagem do seu servidor, execute SELECT @@LANGUAGE.
Para obter mais informações, consulte Conversão não determinística de cadeias literais de data em valores DATE.
... n
Especifica o número de valores fornecidos por boundary_value, não excedendo 14.999. O número de partições criadas é igual a n + 1. Os valores não precisam de ser listados por ordem. Se os valores não estiverem em ordem, o Motor de Base de Dados ordena-os, cria a função e devolve um aviso de que os valores não estão fornecidos por ordem. O Motor de Base de Dados devolve um erro se n incluir valores duplicados.
ESQUERDA | CERTO
Especifica de que lado de cada intervalo de valor de fronteira, à esquerda ou à direita, a boundary_value [ ,... n ] pertence, quando os valores dos intervalos são ordenados pelo Motor de Base de Dados por ordem crescente da esquerda para a direita. Se não especificado, ESQUERDA é o padrão.
Observações
O âmbito de uma função de partição está limitado à base de dados onde é criada. Dentro da base de dados, as funções de partição residem num namespace separado das outras funções.
Quaisquer linhas cuja coluna de partição tenha valores nulos são colocadas na partição mais à esquerda, a menos que NULL seja especificado como valor de fronteira e RIGHT seja indicado. Neste caso, a partição mais à esquerda é uma partição vazia, e os valores NULL são colocados na partição seguinte.
Permissions
Qualquer uma das seguintes permissões pode ser usada para executar a FUNÇÃO CRIAR PARTIÇÃO:
Permissão para ALTER ANY DATASPACE. A permissão é atribuída por padrão aos membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin.
Permissão CONTROL ou ALTER na base de dados onde a função de partição está a ser criada.
CONTROLAR SERVIDOR ou ALTERAR QUALQUER PERMISSÃO DE BASE DE DADOS no servidor da base de dados onde a função de partição está a ser criada.
Examples
A. Criar uma função de partição RANGE LEFT numa coluna int
A função de partição seguinte particionará uma tabela ou índice em quatro partições.
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
A tabela seguinte mostra como uma tabela que utiliza esta função de partição ao particionar a coluna col1 seria particionada.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Valores |
Col1<= 1 |
Col1>1 E col1<= 100 |
Col1>100 E col1<=1000 |
Col1>1000 |
B. Criar uma função de partição RANGE RIGHT numa coluna int
A função de partição seguinte usa os mesmos valores para boundary_value [ ,... n ] como no exemplo anterior, exceto que especifica RANGE RIGHT.
CREATE PARTITION FUNCTION myRangePF2 (int)
AS RANGE RIGHT FOR VALUES (1, 100, 1000);
A tabela seguinte mostra como uma tabela que utiliza esta função de partição ao particionar a coluna col1 seria particionada.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Valores |
Col1<1 |
Col1>= 1 E col1<100 |
Col1>= 100 E col1<1000 |
Col1>= 1000 |
C. Criar uma função de partição RANGE RIGHT numa coluna de data-hora
A função de partição seguinte divide uma tabela ou índice em 12 partições, uma para cada mês de um ano de valores numa coluna de data-hora .
CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
'20030501', '20030601', '20030701', '20030801',
'20030901', '20031001', '20031101', '20031201');
A tabela seguinte mostra como uma tabela ou índice que utiliza esta função de partição na coluna de partição datecol seria particionado.
| Partition | 1 | 2 | ... | 11 | 12 |
|---|---|---|---|---|---|
| Valores |
datecol<February 1, 2003 |
datecol>= February 1, 2003 AND datecol<March 1, 2003 |
datecol>= November 1, 2003 E col1<December 1, 2003 |
datecol>= December 1, 2003 |
D. Criação de uma função de partição numa coluna de caracteres
A função de partição seguinte divide uma tabela ou índice em quatro partições.
CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
A tabela seguinte mostra como uma tabela que utiliza esta função de partição ao particionar a coluna col1 seria particionada.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Valores |
Col1<EX... |
Col1>= EX E col1<RXE... |
Col1>= RXE E col1<XR... |
Col1>= XR |
E. Criação de 15.000 partições
A função de partição seguinte divide uma tabela ou índice em 15.000 partições.
--Create integer partition function for 15,000 partitions.
DECLARE @IntegerPartitionFunction nvarchar(max) =
N'CREATE PARTITION FUNCTION IntegerPartitionFunction (int)
AS RANGE RIGHT FOR VALUES (';
DECLARE @i int = 1;
WHILE @i < 14999
BEGIN
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N', ';
SET @i += 1;
END
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N');';
EXEC sp_executesql @IntegerPartitionFunction;
GO
F. Criação de partições durante vários anos
A função de partição seguinte divide uma tabela ou índice em 50 partições numa coluna datetime2 . Existe uma partição para cada mês entre janeiro de 2007 e janeiro de 2011.
--Create date partition function with increment by month.
DECLARE @DatePartitionFunction nvarchar(max) =
N'CREATE PARTITION FUNCTION DatePartitionFunction (datetime2)
AS RANGE RIGHT FOR VALUES (';
DECLARE @i datetime2 = '20070101';
WHILE @i < '20110101'
BEGIN
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10)) + '''' + N', ';
SET @i = DATEADD(MM, 1, @i);
END
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10))+ '''' + N');';
EXEC sp_executesql @DatePartitionFunction;
GO
Próximos passos
Saiba mais sobre particionamento de tabelas e conceitos relacionados nos seguintes artigos: