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

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Crée une fonction, dans la base de données active, qui mappe les lignes d'une table ou d'un index avec des partitions à partir des valeurs d'une colonne spécifiée.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. L'utilisation de CREATE PARTITION FUNCTION est la première étape de la création d'une table ou d'un index partitionné.Using CREATE PARTITION FUNCTION is the first step in creating a partitioned table or index. Dans SQL Server 2017SQL Server 2017, une table ou un index peut comprendre au maximum 15 000 partitions.In SQL Server 2017SQL Server 2017, a table or index can have a maximum of 15,000 partitions.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

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

ArgumentsArguments

partition_function_namepartition_function_name
Nom de la fonction de partition.Is the name of the partition function. Les noms des fonctions de partition doivent être uniques dans la base de données et respecter les règles applicables aux identificateurs.Partition function names must be unique within the database and comply with the rules for identifiers.

input_parameter_typeinput_parameter_type
Type de données de la colonne utilisée pour le partitionnement.Is the data type of the column used for partitioning. Tous les types de données sont utilisables comme colonnes de partitionnement, à l’exception de text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), des types de données d’alias ou des types de données CLR définis par l’utilisateur.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.

La colonne effectivement utilisée, appelée « colonne de partitionnement », est spécifiée dans l'instruction 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
Spécifie les valeurs limites de chaque partition d’une table ou d’un index partitionné qui utilise partition_function_name.Specifies the boundary values for each partition of a partitioned table or index that uses partition_function_name. Si boundary_value est vide, la fonction de partition mappe la totalité de la table ou de l’index en une seule partition à l’aide de 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. Une seule colonne de partitionnement, spécifiée dans une instruction CREATE TABLE ou CREATE INDEX, peut être utilisée.Only one partitioning column, specified in a CREATE TABLE or CREATE INDEX statement, can be used.

boundary_value est une expression de constante qui peut référencer des variables.boundary_value is a constant expression that can reference variables. Il peut s'agir de variables de type définies par l'utilisateur, de fonctions et de fonctions définies par l'utilisateur.This includes user-defined type variables, or functions and user-defined functions. Elle ne peut pas référencer des expressions Transact-SQLTransact-SQL.It cannot reference Transact-SQLTransact-SQL expressions. boundary_value doit correspondre ou être implicitement convertible dans le type de données spécifié dans input_parameter_type, et ne doit pas être tronquée lors de la conversion implicite d’une manière où la taille et l’échelle de la valeur ne correspondraient pas à son attribut input_parameter_type correspondant.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.

Note

Si boundary_value est composé de littéraux datetime ou smalldatetime, ces littéraux sont évalués en partant du principe que l’anglais est la langue de session.If boundary_value consists of datetime or smalldatetime literals, these literals are evaluated assuming that us_english is the session language. Ce comportement est déconseillé.This behavior is deprecated. Pour vous assurer que la définition de la fonction de partition fonctionne comme prévu pour toutes les langues de session, nous vous recommandons d'utiliser des constantes qui sont interprétées de la même manière quels que soient vos paramètres linguistiques, comme le format aaaammjj, ou bien de convertir explicitement les littéraux dans un style spécifique.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. Pour déterminer la langue de session de votre serveur, exécutez SELECT @@LANGUAGE.To determine the language session of your server, run SELECT @@LANGUAGE.

...n...n
Spécifie le nombre de valeurs fournies par boundary_value, dans la limite de 14 999.Specifies the number of values supplied by boundary_value, not to exceed 14,999. Le nombre de partitions créées est égal à n + 1.The number of partitions created is equal to n + 1. Il n'est pas nécessaire que les valeurs soient recensées dans l'ordre.The values do not have to be listed in order. Si les valeurs ne sont pas dans l'ordre, le Moteur de base de donnéesDatabase Engine les trie, crée la fonction et affiche un message d'avertissement indiquant qu'elles ne sont pas fournies dans l'ordre.If the values are not in order, the Moteur de base de donnéesDatabase Engine sorts them, creates the function, and returns a warning that the values are not provided in order. Le moteur de base de données retourne une erreur si n comprend des valeurs dupliquées.The Database Engine returns an error if n includes any duplicate values.

LEFT | RIGHTLEFT | RIGHT
Spécifie à quel côté de chaque intervalle de valeur limite, gauche ou droite, appartient boundary_value [ ,...n ] quand les valeurs de l’intervalle sont triées par le Moteur de base de donnéesDatabase Engine dans l’ordre croissant, de la gauche vers la droite.Specifies to which side of each boundary value interval, left or right, the boundary_value [ ,...n ] belongs, when interval values are sorted by the Moteur de base de donnéesDatabase Engine in ascending order from left to right. Si cet argument n'est pas spécifié, la valeur par défaut est LEFT.If not specified, LEFT is the default.

Notes Remarks

L'étendue d'une fonction de partition est limitée à la base de données dans laquelle elle est créée.The scope of a partition function is limited to the database that it is created in. Dans la base de données, les fonctions de partition résident dans un espace de noms indépendant des autres fonctions.Within the database, partition functions reside in a separate namespace from the other functions.

Toutes les lignes dont la colonne de partitionnement possède des valeurs NULL sont placées dans la partition située le plus à gauche, sauf si NULL est spécifié comme valeur limite et que RIGHT est indiqué.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. Dans ce cas, la partition située le plus à gauche est une partition vide et les valeurs NULL sont placées dans la partition suivante.In this case, the left-most partition is an empty partition, and NULL values are placed in the following partition.

AutorisationsPermissions

N'importe laquelle des autorisations suivantes permet d'exécuter CREATE PARTITION FUNCTION :Any one of the following permissions can be used to execute CREATE PARTITION FUNCTION:

  • Autorisation ALTER ANY DATASPACE.ALTER ANY DATASPACE permission. Cette autorisation est attribuée par défaut aux membres du rôle de serveur fixe sysadmin et des rôles de base de données fixes db_owner et db_ddladmin .This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • Autorisation CONTROL ou ALTER sur la base de données dans laquelle la fonction de partition est créée.CONTROL or ALTER permission on the database in which the partition function is being created.

  • Autorisation CONTROL SERVER ou ALTER ANY DATABASE sur le serveur de la base de données dans laquelle la fonction de partition est créée.CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function is being created.

ExemplesExamples

A.A. Création d'une fonction de partition RANGE LEFT sur une colonne de type intCreating a RANGE LEFT partition function on an int column

La fonction de partition suivante partitionne une table ou un index en quatre partitions.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);  

Le tableau suivant illustre le partitionnement d’une table dans laquelle cette fonction de partition est appliquée à la colonne de partitionnement col1.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValeursValues 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. Création d'une fonction de partition RANGE RIGHT sur une colonne de type intCreating a RANGE RIGHT partition function on an int column

La fonction de partition suivante utilise pour boundary_value [ ,...n ] les mêmes valeurs que l’exemple précédent, mais elle spécifie 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);  

Le tableau suivant illustre le partitionnement d’une table dans laquelle cette fonction de partition est appliquée à la colonne de partitionnement col1.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValeursValues 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. Création d'une fonction de partition RANGE RIGHT sur une colonne de type datetimeCreating a RANGE RIGHT partition function on a datetime column

La fonction de partition suivante partitionne une table ou un index en 12 partitions, à raison d’une partition pour chaque mois de valeurs d’une année dans une colonne 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');  

Le tableau suivant illustre le partitionnement d’une table ou d’un index dans lequel cette fonction de partition est appliquée à la colonne de partitionnement datecol.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
ValeursValues 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. Création d'une fonction de partition sur une colonne de type charCreating a partition function on a char column

La fonction de partition suivante partitionne une table ou un index en quatre partitions.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');  

Le tableau suivant illustre le partitionnement d’une table dans laquelle cette fonction de partition est appliquée à la colonne de partitionnement col1.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
ValeursValues 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. Création de 15 000 partitionsCreating 15,000 partitions

La fonction de partition suivante partitionne une table ou un index en 15 000 partitions.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. Création de partitions pour plusieurs annéesCreating partitions for multiple years

La fonction de partition suivante partitionne une table ou un index en 50 partitions sur une colonne datetime2.The following partition function partitions a table or index into 50 partitions on a datetime2 column. Il y a une partition pour chaque mois entre janvier 2007 et janvier 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  

Voir aussiSee Also

Tables et index partitionnés 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)