CREATE PARTITION FUNCTION (Transact-SQL)

Erstellt eine Funktion in der aktuellen Datenbank, die auf der Basis der Werte einer angegebenen Spalte die in einer Tabelle oder einem Index enthaltenen Zeilen Partitionen zuordnet. Das Verwenden von CREATE PARTITION FUNCTION ist der erste Schritt beim Erstellen einer partitionierten Tabelle oder eines partitionierten Index.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • partition_function_name
    Der Name der Partitionsfunktion. Partitionsfunktionsnamen müssen innerhalb der Datenbank eindeutig sein und den Regeln für Bezeichner entsprechen.

  • input_parameter_type
    Der Datentyp der zum Partitionieren verwendeten Spalte. Alle Datentypen, mit Ausnahme von text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), Aliasdatentypen oder benutzerdefinierten CLR-Datentypen, sind gültige Datentypen zum Verwenden als Partitionierungsspalten.

    Die eigentliche Spalte, Partitionierungsspalte genannt, wird in der CREATE TABLE- oder CREATE INDEX-Anweisung angegeben.

  • boundary_value
    Gibt die Grenzwerte für jede Partition einer partitionierten Tabelle oder eines partitionierten Index an, die/der partition_function_name verwendet. Wenn boundary_value leer ist, ordnet die Partitionsfunktion die gesamte Tabelle oder den gesamten Index mithilfe von partition_function_name einer einzigen Partition zu. Nur eine einzige, in einer CREATE TABLE- oder CREATE INDEX-Anweisung angegebene Partitionierungsspalte kann verwendet werden.

    boundary_value ist ein konstanter Ausdruck, der auf Variablen verweisen kann. Dazu gehören Variablen des benutzerdefinierten Typs oder Funktionen und benutzerdefinierte Funktionen. Der Ausdruck kann nicht auf Transact-SQL-Ausdrücke verweisen. boundary_value muss entweder dem in input_parameter_type bereitgestellten Datentyp entsprechen oder implizit in diesen Datentyp konvertiert werden und kann während der impliziten Konvertierung nicht so abgeschnitten werden, dass Größe und Dezimalstellen des Werts nicht mit der Größe und den Dezimalstellen des ihm entsprechenden input_parameter_type übereinstimmen.

    HinweisHinweis

    Wenn boundary_value aus den Literalen datetime oder smalldatetime besteht, werden diese Literale ausgewertet, wobei angenommen wird, dass us_english die Sitzungssprache darstellt. Dieses Verhalten ist als veraltet markiert. 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. Weitere Informationen finden Sie unter Schreiben internationaler Transact-SQL-Anweisungen. Führen Sie SELECT @@LANGUAGE aus, um die Sitzungssprache des Servers zu bestimmen.

  • ...n
    Gibt die von boundary_value bereitgestellte Anzahl von Werten an, wobei 999 nicht überschritten werden darf. Die Anzahl von erstellten Partitionen entspricht n + 1. Die Werte müssen nicht der Reihenfolge nach aufgeführt werden. Wenn die Werte nicht der Reihenfolge nach aufgeführt sind, werden sie von Database Engine (Datenbankmodul) sortiert, die Funktion wird erstellt und eine Warnung zurückgegeben, die besagt, dass die Werte nicht der Reihenfolge nach bereitgestellt werden.Das Datenbankmodul gibt einen Fehler zurück, wenn n doppelte Werte enthält.

  • LEFT | RIGHT
    Gibt an, zu welcher Seite, links oder rechts, die einzelnen Grenzwertintervalle boundary_value [ ,...n ] gehören, wenn Intervallwerte von Database Engine (Datenbankmodul) in aufsteigender Reihenfolge von links nach rechts sortiert werden. Fehlt die Angabe, ist LEFT der Standardwert. Weitere Informationen finden Sie unter Beispiele.

Hinweise

Der Bereich einer Partitionsfunktion beschränkt sich auf die Datenbank, in der sie erstellt wird. Innerhalb der Datenbank befinden sich Partitionsfunktionen in einem von anderen Funktionen abgetrennten Namespace.

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. In diesem Fall ist die Partition ganz links eine leere Partition, und NULL-Werte werden in die sich anschließende Partition platziert.

Berechtigungen

Jede der folgenden Berechtigungen kann zum Ausführen von CREATE PARTITION FUNCTION verwendet werden:

  • ALTER ANY DATASPACE-Berechtigung. Diese Berechtigung liegt standardmäßig bei den Mitgliedern der festen Serverrolle sysadmin und den festen Datenbankrollen db_owner und db_ddladmin.

  • CONTROL- oder ALTER-Berechtigung für die Datenbank, in der die Partitionsfunktion erstellt wird.

  • CONTROL SERVER- oder ALTER ANY DATABASE-Berechtigung für die Datenbank, in der die Partitionsfunktion erstellt wird.

Beispiele

A. Erstellen einer RANGE LEFT-Partitionsfunktion für eine int-Spalte

Mit der folgenden Partitionsfunktion wird eine Tabelle oder ein Index in vier Partitionen partitioniert.

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.

Partition

1

2

3

4

Werte

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <=1000

col1 > 1000

B. Erstellen einer RANGE RIGHT-Partitionsfunktion für eine int-Spalte

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.

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.

Partition

1

2

3

4

Werte

col1 < 1

col1 >= 1 AND col1 < 100

col1 >= 100 AND col1 < 1000

col1 >= 1000

C. Erstellen einer RANGE RIGHT-Partitionsfunktion für eine datetime-Spalte

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.

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.

Partition

1

2

...

11

12

Werte

datecol < February 1, 2003

datecol >= February 1, 2003 AND datecol < March 1, 2003

datecol >= November 1, 2003 AND col1 < December 1, 2003

col1 >= December 1, 2003

D. Erstellen einer Partitionsfunktion für eine char-Spalte

Mit der folgenden Partitionsfunktion wird eine Tabelle oder ein Index in vier Partitionen partitioniert.

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.

Partition

1

2

3

4

Werte

col1 < EX...

col1 >= EX AND col1 < RXE...

col1 >= RXE AND col1 < XR...

col1 >= XR