CREATE PARTITION FUNCTION (Transact-SQL)CREATE PARTITION FUNCTION (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Cria uma função no banco de dados atual que mapeia as linhas de uma tabela ou índice em partições com base nos valores de uma coluna especificada.Creates a function in the current database that maps the rows of a table or index into partitions based on the values of a specified column. Usar CREATE PARTITION FUNCTION é a primeira etapa na criação de uma tabela particionada ou índice.Using CREATE PARTITION FUNCTION is the first step in creating a partitioned table or index. No SQL Server 2017SQL Server 2017, uma tabela ou índice pode ter no máximo 15.000 partições.In SQL Server 2017SQL Server 2017, a table or index can have a maximum of 15,000 partitions.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )  
AS RANGE [ LEFT | RIGHT ]   
FOR VALUES ( [ boundary_value [ ,...n ] ] )   
[ ; ]  

ArgumentosArguments

partition_function_namepartition_function_name
É o nome da função de partição.Is the name of the partition function. Os nomes de funções de partição devem ser exclusivos no banco de dados e estar em conformidade com as regras para identificadores.Partition function names must be unique within the database and comply with the rules for identifiers.

input_parameter_typeinput_parameter_type
É o tipo de dados da coluna usada para particionamento.Is the data type of the column used for partitioning. Todos os tipos de dados são válidos para uso como colunas de particionamento, exceto text, ntext, image, xml, timestamp, varchar(max) , nvarchar(max) , varbinary(max) , tipos de dados de alias ou tipos de dados CLR definidos pelo usuário.All data types are valid for use as partitioning columns, except text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), alias data types, or CLR user-defined data types.

A coluna real, conhecida como uma coluna de particionamento, é especificada na instrução CREATE TABLE ou CREATE INDEX.The actual column, known as a partitioning column, is specified in the CREATE TABLE or CREATE INDEX statement.

boundary_valueboundary_value
Especifica os valores de limite para cada partição de uma tabela particionada ou índice que usa partition_function_name.Specifies the boundary values for each partition of a partitioned table or index that uses partition_function_name. Se boundary_valueestiver vazio, a função de partição mapeará para uma única partição toda a tabela ou todo o índice usando partition_function_name.If boundary_value is empty, the partition function maps the whole table or index using partition_function_name into a single partition. É possível usar somente uma coluna de divisão, especificada em uma instrução CREATE TABLE ou CREATE INDEX.Only one partitioning column, specified in a CREATE TABLE or CREATE INDEX statement, can be used.

boundary_value é uma expressão constante que pode fazer referência a variáveis.boundary_value is a constant expression that can reference variables. Isso inclui variáveis ou funções de tipo definido pelo usuário e funções definidas pelo usuário.This includes user-defined type variables, or functions and user-defined functions. Não pode fazer referência a expressões Transact-SQLTransact-SQL.It cannot reference Transact-SQLTransact-SQL expressions. boundary_value deve corresponder ou poder ser implicitamente convertido no tipo de dados fornecido em input_parameter_type, e não pode ser truncado durante conversão implícita de modo que o tamanho e a escala do valor não sejam equivalentes a seu input_parameter_type correspondente.boundary_value must either match or be implicitly convertible to the data type supplied in input_parameter_type, and cannot be truncated during implicit conversion in a way that the size and scale of the value does not match that of its corresponding input_parameter_type.

Observação

Se boundary_value consiste em datetime ou smalldatetime literais, esses literais serão avaliados supondo que us_english é o idioma da sessão.If boundary_value consists of datetime or smalldatetime literals, these literals are evaluated assuming that us_english is the session language. Este comportamento é preterido.This behavior is deprecated. Para certificar-se de que a definição da função de partição se comporta conforme esperado para todos os idiomas de sessão, recomendamos usar constantes que sejam interpretadas da mesma maneira para todas as configurações de idioma, tal como o formato aaaammdd; ou converter explicitamente literais em um estilo específico.To make sure the partition function definition behaves as expected for all session languages, we recommend that you use constants that are interpreted the same way for all language settings, such as the yyyymmdd format; or explicitly convert literals to a specific style. Para determinar a sessão de idioma de seu servidor, execute SELECT @@LANGUAGE.To determine the language session of your server, run SELECT @@LANGUAGE.

Para obter mais informações, confira Conversão não determinística de cadeias de caracteres de data literal em valores de DATA.For more information, see Nondeterministic conversion of literal date strings into DATE values.

...n...n
Especifica o número de valores fornecidos por boundary_value, não excedendo 14.999.Specifies the number of values supplied by boundary_value, not to exceed 14,999. O número de partições criadas é igual a n + 1.The number of partitions created is equal to n + 1. Os valores não precisam ser listados em ordem.The values do not have to be listed in order. Se os valores não estiverem em ordem, o Mecanismo de Banco de DadosDatabase Engine os classifica, cria a função e retorna um aviso de que os valores não foram fornecidos em ordem.If the values are not in order, the Mecanismo de Banco de DadosDatabase Engine sorts them, creates the function, and returns a warning that the values are not provided in order. O Mecanismo de Banco de Dados retorna um erro se n inclui um valor duplicado.The Database Engine returns an error if n includes any duplicate values.

LEFT | RIGHTLEFT | RIGHT
Especifica a qual lado de cada intervalo de valor de limite, esquerdo ou direito, o boundary_value [ , ...n ] pertence quando valores de intervalo são classificados pelo Mecanismo de Banco de DadosDatabase Engine em ordem crescente da esquerda para a direita.Specifies to which side of each boundary value interval, left or right, the boundary_value [ ,...n ] belongs, when interval values are sorted by the Mecanismo de Banco de DadosDatabase Engine in ascending order from left to right. Se não for especificado, LEFT será o padrão.If not specified, LEFT is the default.

RemarksRemarks

O escopo de uma função de partição é limitado ao banco de dados em que é criado.The scope of a partition function is limited to the database that it is created in. No banco de dados, as funções das partições residem em um namespace separado das outras funções.Within the database, partition functions reside in a separate namespace from the other functions.

Quaisquer linhas cuja coluna de particionamento tenha valores nulos serão colocadas na partição mais à esquerda, a menos que NULL seja especificado como um valor de limite e RIGHT seja indicado.Any rows whose partitioning column has null values are placed in the left-most partition, unless NULL is specified as a boundary value and RIGHT is indicated. Nesse caso, a partição mais à esquerda será uma partição vazia e os valores NULL serão colocados na partição seguinte.In this case, the left-most partition is an empty partition, and NULL values are placed in the following partition.

PermissõesPermissions

Qualquer uma das permissões a seguir pode ser usada para executar CREATE PARTITION FUNCTION:Any one of the following permissions can be used to execute CREATE PARTITION FUNCTION:

  • Permissão ALTER ANY DATASPACE.ALTER ANY DATASPACE permission. Essa permissão tem como padrão os membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin .This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • Permissão CONTROL ou ALTER no banco de dados no qual a função de partição está sendo criada.CONTROL or ALTER permission on the database in which the partition function is being created.

  • Permissão CONTROL SERVER ou ALTER ANY DATABASE no servidor do banco de dados no qual a função de partição está sendo criada.CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function is being created.

ExemplosExamples

A.A. Criando uma função de partição RANGE LEFT em uma coluna intCreating a RANGE LEFT partition function on an int column

A função de partição a seguir particionará uma tabela ou um índice em quatro partições.The following partition function will partition a table or index into four partitions.

CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  

A tabela a seguir mostra como uma tabela que usa essa função de partição na coluna de particionamento col1 seria particionada.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValoresValues col1 <= 1col1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <=1000col1 > 100 AND col1 <=1000 col1 > 1000col1 > 1000

B.B. Criando uma função de partição RANGE RIGHT em uma coluna intCreating a RANGE RIGHT partition function on an int column

A função de partição a seguir usa os mesmos valores para boundary_value [ , ...n ] que o do exemplo anterior, com exceção de que ela especifica RANGE RIGHT.The following partition function uses the same values for boundary_value [ ,...n ] as the previous example, except it specifies RANGE RIGHT.

CREATE PARTITION FUNCTION myRangePF2 (int)  
AS RANGE RIGHT FOR VALUES (1, 100, 1000);  

A tabela a seguir mostra como uma tabela que usa essa função de partição na coluna de particionamento col1 seria particionada.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValoresValues col1 < 1col1 < 1 col1 >= 1 AND col1 < 100col1 >= 1 AND col1 < 100 col1 >= 100 AND col1 < 1000col1 >= 100 AND col1 < 1000 col1 >= 1000col1 >= 1000

C.C. Criando uma função de partição RANGE RIGHT em uma coluna datetimeCreating a RANGE RIGHT partition function on a datetime column

A função de partição a seguir particiona uma tabela ou um índice em 12 partições, uma para cada mês de valores válidos no ano em uma coluna datetime.The following partition function partitions a table or index into 12 partitions, one for each month of a year's worth of values in a datetime column.

CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)  
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',  
               '20030501', '20030601', '20030701', '20030801',   
               '20030901', '20031001', '20031101', '20031201');  

A tabela a seguir mostra como uma tabela ou um índice que usa essa função de partição na coluna de particionamento datecol seria particionada.The following table shows how a table or index that uses this partition function on partitioning column datecol would be partitioned.

PartitionPartition 11 22 ...... 1111 1212
ValoresValues datecol < February 1, 2003datecol < February 1, 2003 datecol >= February 1, 2003 AND datecol < March 1, 2003datecol >= February 1, 2003 AND datecol < March 1, 2003 datecol >= November 1, 2003 AND col1 < December 1, 2003datecol >= November 1, 2003 AND col1 < December 1, 2003 datecol >= December 1, 2003datecol >= December 1, 2003

D.D. Criando uma função de partição em uma coluna charCreating a partition function on a char column

A função de partição a seguir particiona uma tabela ou um índice em quatro partições.The following partition function partitions a table or index into four partitions.

CREATE PARTITION FUNCTION myRangePF3 (char(20))  
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');  

A tabela a seguir mostra como uma tabela que usa essa função de partição na coluna de particionamento col1 seria particionada.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValoresValues col1 < EX...col1 < EX... col1 >= EX AND col1 < RXE...col1 >= EX AND col1 < RXE... col1 >= RXE AND col1 < XR...col1 >= RXE AND col1 < XR... col1 >= XRcol1 >= XR

E.E. Criando 15.000 partiçõesCreating 15,000 partitions

A função de partição a seguir particiona uma tabela ou um índice em 15.000 partições.The following partition function partitions a table or index into 15,000 partitions.

--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.F. Criando partições para vários anosCreating partitions for multiple years

A função de partição a seguir particiona uma tabela ou um índice em 50 partições em uma coluna datetime2.The following partition function partitions a table or index into 50 partitions on a datetime2 column. Há uma partição para cada mês entre janeiro de 2007 e janeiro de 2011.There is one partitions for each month between January 2007 and January 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  

Consulte TambémSee Also

Tabelas e índices particionados Partitioned Tables and Indexes
$PARTITION (Transact-SQL) $PARTITION (Transact-SQL)
ALTER PARTITION FUNCTION (Transact-SQL) ALTER PARTITION FUNCTION (Transact-SQL)
DROP PARTITION FUNCTION (Transact-SQL) DROP PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sys.partition_functions (Transact-SQL) sys.partition_functions (Transact-SQL)
sys.partition_parameters (Transact-SQL) sys.partition_parameters (Transact-SQL)
sys.partition_range_values (Transact-SQL) sys.partition_range_values (Transact-SQL)
sys.partitions (Transact-SQL) sys.partitions (Transact-SQL)
sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)sys.index_columns (Transact-SQL)