CREATE PARTITION FUNCTION (Transact-SQL)
Aktualisiert: 17. Juli 2006
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 Indexes.
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 benutzerdefinierte 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 Indexes 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 Wertes nicht mit der Größe und den Dezimalstellen des ihm entsprechenden input_parameter_type übereinstimmen.
Hinweis: 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 die Definition der Partitionsfunktion sich 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 Microsoft SQL Server 2005-Datenbankmodul sortiert, die Funktion 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 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 <= |
col1 > |
col1 > |
col1 > |
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 < |
col1 >= |
col1 >= |
col1 >= |
B. 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 < |
datecol >= |
datecol >= |
col1 >= |
C. 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 < |
col1 >= |
col1 >= |
col1 >= |
Siehe auch
Verweis
$PARTITION (Transact-SQL)
ALTER PARTITION FUNCTION (Transact-SQL)
DROP PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL)
CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.partition_functions (Transact-SQL)
sys.partition_parameters (Transact-SQL)
sys.partition_range_values (Transact-SQL)
sys.partitions (Transact-SQL)
sys.tables (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
17. Juli 2006 |
|