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

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Erstellt eine Funktion in der aktuellen Datenbank, die Zeilen einer Tabelle oder eines Indexes Partitionen zuordnet. Dies erfolgt auf Grundlage der Werte einer angegebenen Spalte.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. Das Verwenden von CREATE PARTITION FUNCTION ist der erste Schritt beim Erstellen einer partitionierten Tabelle oder eines partitionierten Index.Using CREATE PARTITION FUNCTION is the first step in creating a partitioned table or index. Eine Tabelle oder ein Index in SQL Server 2017SQL Server 2017 kann maximal 15.000 Partitionen aufweisen.In SQL Server 2017SQL Server 2017, a table or index can have a maximum of 15,000 partitions.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

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

ArgumenteArguments

partition_function_namepartition_function_name
Der Name der Partitionsfunktion.Is the name of the partition function. Partitionsfunktionsnamen müssen innerhalb der Datenbank eindeutig sein und den Regeln für Bezeichner entsprechen.Partition function names must be unique within the database and comply with the rules for identifiers.

input_parameter_typeinput_parameter_type
Der Datentyp der zum Partitionieren verwendeten Spalte.Is the data type of the column used for partitioning. Als Partitionierungsspalte sind alle Datentypen außer text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), Aliasdatentypen oder CLR-benutzerdefinierten Datentypen, zulässig.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.

Die eigentliche Spalte, Partitionierungsspalte genannt, wird in der CREATE TABLE- oder CREATE INDEX-Anweisung angegeben.The actual column, known as a partitioning column, is specified in the CREATE TABLE or CREATE INDEX statement.

boundary_valueboundary_value
Gibt die Grenzwerte für jede Partition einer partitionierten Tabelle oder eines partitionierten Index an, die bzw. der partition_function_name verwendet.Specifies the boundary values for each partition of a partitioned table or index that uses partition_function_name. Wenn boundary_value leer bleibt, ordnet die Partitionsfunktion die gesamte Tabelle oder den gesamten Index mithilfe von partition_function_name einer Partition zu.If boundary_value is empty, the partition function maps the whole table or index using partition_function_name into a single partition. Nur eine einzige, in einer CREATE TABLE- oder CREATE INDEX-Anweisung angegebene Partitionierungsspalte kann verwendet werden.Only one partitioning column, specified in a CREATE TABLE or CREATE INDEX statement, can be used.

boundary_value ist ein konstanter Ausdruck, der auf Variablen verweisen kann.boundary_value is a constant expression that can reference variables. Dazu gehören Variablen des benutzerdefinierten Typs oder Funktionen und benutzerdefinierte Funktionen.This includes user-defined type variables, or functions and user-defined functions. Er kann nicht auf Transact-SQLTransact-SQL-Ausdrücke verweisen.It cannot reference Transact-SQLTransact-SQL expressions. boundary_value muss entweder mit dem in input_parameter_type enthaltenen Datentyp übereinstimmen oder implizit in diesen konvertiert werden. Während der impliziten Konvertierung kann der Wert nicht so abgeschnitten werden, dass dessen Größe und Dezimalstellen mit denen des entsprechenden input_parameter_type-Werts nicht übereinstimmen.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.

Hinweis

Wenn boundary_value aus den Literalen datetime oder smalldatetime besteht, werden diese Literale ausgewertet, wobei angenommen wird, dass us_english die Sitzungssprache darstellt.If boundary_value consists of datetime or smalldatetime literals, these literals are evaluated assuming that us_english is the session language. Dieses Verhalten ist als veraltet markiert.This behavior is deprecated. Wenn Sie sicherstellen möchten, dass sich die Definition der Partitionsfunktion für alle Sitzungssprachen wie erwartet verhält, wird empfohlen, dass Sie die Konstanten verwenden, die für alle Sprachen gleich interpretiert werden, z. B. das Format yyyymmdd, oder dass Sie die Literale explizit in ein bestimmtes Format konvertieren.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. Führen Sie SELECT @@LANGUAGE aus, um die Sitzungssprache des Servers zu bestimmen.To determine the language session of your server, run SELECT @@LANGUAGE.

...n...n
Gibt die Anzahl der von boundary_value bereitgestellten Werte an, wobei 14.999 nicht überschritten werden darf.Specifies the number of values supplied by boundary_value, not to exceed 14,999. Die Anzahl der erstellten Partitionen entspricht n + 1.The number of partitions created is equal to n + 1. Die Werte müssen nicht der Reihenfolge nach angegeben werden.The values do not have to be listed in order. Wenn die Werte nicht der Reihenfolge nach aufgeführt sind, werden sie von DatenbankmodulDatabase Engine sortiert, die Funktion wird erstellt und eine Warnung zurückgegeben, die besagt, dass die Werte nicht der Reihenfolge nach bereitgestellt werden.If the values are not in order, the DatenbankmodulDatabase Engine sorts them, creates the function, and returns a warning that the values are not provided in order. Die Datenbank-Engine gibt einen Fehler zurück, wenn n doppelte Werte enthält.The Database Engine returns an error if n includes any duplicate values.

LEFT | RIGHTLEFT | RIGHT
Gibt an, zu welcher Seite, links oder rechts, die einzelnen Grenzwertintervalle boundary_value [ ,...n ] gehören, wenn Intervallwerte von DatenbankmodulDatabase Engine in aufsteigender Reihenfolge von links nach rechts sortiert werden.Specifies to which side of each boundary value interval, left or right, the boundary_value [ ,...n ] belongs, when interval values are sorted by the DatenbankmodulDatabase Engine in ascending order from left to right. Fehlt die Angabe, ist LEFT der Standardwert.If not specified, LEFT is the default.

RemarksRemarks

Der Bereich einer Partitionsfunktion beschränkt sich auf die Datenbank, in der sie erstellt wird.The scope of a partition function is limited to the database that it is created in. Innerhalb der Datenbank befinden sich Partitionsfunktionen in einem von anderen Funktionen abgetrennten Namespace.Within the database, partition functions reside in a separate namespace from the other functions.

Jede Zeile, deren Partitionierungsspalte NULL-Werte enthält, wird in die Partition ganz links platziert, es sei denn, NULL wurde als Grenzwert angegeben, und RIGHT wird angezeigt.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. In diesem Fall ist die Partition ganz links eine leere Partition, und NULL-Werte werden in die sich anschließende Partition platziert.In this case, the left-most partition is an empty partition, and NULL values are placed in the following partition.

BerechtigungenPermissions

Jede der folgenden Berechtigungen kann zum Ausführen von CREATE PARTITION FUNCTION verwendet werden:Any one of the following permissions can be used to execute CREATE PARTITION FUNCTION:

  • ALTER ANY DATASPACE-Berechtigung.ALTER ANY DATASPACE permission. Diese Berechtigung gilt standardmäßig für Mitglieder der festen Serverrolle sysadmin und für Mitglieder der festen Datenbankrollen db_owner und db_ddladmin .This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • CONTROL- oder ALTER-Berechtigung für die Datenbank, in der die Partitionsfunktion erstellt wird.CONTROL or ALTER permission on the database in which the partition function is being created.

  • CONTROL SERVER- oder ALTER ANY DATABASE-Berechtigung für die Datenbank, in der die Partitionsfunktion erstellt wird.CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function is being created.

BeispieleExamples

A.A. Erstellen einer RANGE LEFT-Partitionsfunktion für eine int-SpalteCreating a RANGE LEFT partition function on an int column

Mit der folgenden Partitionsfunktion wird eine Tabelle oder ein Index in vier Partitionen partitioniert.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);  

In der folgenden Tabelle wird gezeigt, wie eine Tabelle, die diese Partitionsfunktion auf der Partitionierungsspalte col1 verwendet, partitioniert würde.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
WerteValues 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. Erstellen einer RANGE RIGHT-Partitionsfunktion für eine int-SpalteCreating a RANGE RIGHT partition function on an int column

In der folgenden Partitionsfunktion werden dieselben Werte für boundary_value [ ,...n ] wie in der Partitionsfunktion im vorherigen Beispiel verwendet, mit dem Unterschied, dass RANGE RIGHT angegeben wird.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);  

In der folgenden Tabelle wird gezeigt, wie eine Tabelle, die diese Partitionsfunktion auf der Partitionierungsspalte col1 verwendet, partitioniert würde.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
WerteValues 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. Erstellen einer RANGE RIGHT-Partitionsfunktion für eine datetime-SpalteCreating a RANGE RIGHT partition function on a datetime column

Die folgende Partitionsfunktion partitioniert eine Tabelle oder einen Index in 12 Partitionen, d.h. eine für die Menge an Werten eines jeden Monats des Jahres in einer datetime-Spalte.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');  

In der folgenden Tabelle wird dargestellt, wie eine Tabelle oder ein Index, die bzw. der diese Partitionsfunktion auf der datecol-Partitionierungsspalte verwendet, partitioniert wird.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
WerteValues 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. Erstellen einer Partitionsfunktion für eine char-SpalteCreating a partition function on a char column

Mit der folgenden Partitionsfunktion wird eine Tabelle oder ein Index in vier Partitionen partitioniert.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');  

In der folgenden Tabelle wird gezeigt, wie eine Tabelle, die diese Partitionsfunktion auf der Partitionierungsspalte col1 verwendet, partitioniert würde.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
WerteValues 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. Erstellen von 15.000 PartitionenCreating 15,000 partitions

Mit der folgenden Partitionsfunktion wird eine Tabelle oder ein Index in 15.000 Partitionen partitioniert.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. Erstellen von Partitionen für mehrere JahreCreating partitions for multiple years

Die folgende Partitionsfunktion partitioniert eine Tabelle oder einen Index in einer datetime2-Spalte in 50 Partitionen.The following partition function partitions a table or index into 50 partitions on a datetime2 column. Für jeden Monat zwischen Januar 2007 und Januar 2011 gibt es eine Partition.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  

Weitere Informationen finden Sie unterSee Also

Partitionierte Tabellen und Indizes 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)