CREATE PARTITION FUNCTION (Transact-SQL)

Crea una funzione nel database corrente che inserisce le righe di una tabella o di un indice in partizioni in base ai valori della colonna specificata. L'utilizzo di CREATE PARTITION FUNCTION rappresenta il primo passaggio per la creazione di una tabella o di un indice partizionato.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • partition_function_name
    Nome della funzione di partizione. I nomi delle funzioni di partizione devono essere univoci nel database e devono essere conformi alle regole per gli identificatori.

  • input_parameter_type
    Tipo di dati della colonna utilizzata per il partizionamento. Come colonne di partizionamento possono essere utilizzati tutti i tipi di dati, tranne text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), i tipi di dati alias o i tipi CLR definiti dall'utente.

    La colonna effettiva, ovvero la colonna di partizionamento, è specificata nell'istruzione CREATE TABLE o CREATE INDEX.

  • boundary_value
    Specifica i valori limite per ogni partizione di una tabella o di un indice partizionato che utilizza partition_function_name. Se boundary_value è vuoto, la funzione di partizione inserisce l'intera tabella o l'intero indice che utilizza partition_function_name in un'unica partizione. È possibile utilizzare una sola colonna di partizionamento, specificata in un'istruzione CREATE TABLE o CREATE INDEX.

    boundary_value è un'espressione costante che può fare riferimento a variabili, incluse variabili di tipi definiti dall'utente o funzioni e funzioni definite dall'utente. Non può fare riferimento a espressioni Transact-SQL. boundary_value deve corrispondere al tipo di dati specificato in input_parameter_type, oppure deve essere convertibile in esso in modo implicito, e durante la conversione implicita non può venire troncato in modo tale che le dimensioni e la scala del valore non corrispondano al relativo input_parameter_type.

    Nota

    Se boundary_value è costituito dal valore letterale datetime o smalldatetime, tale valore viene valutato presupponendo che la lingua di sessione sia us_english. Questo comportamento è obsoleto. Per garantire che la definizione della funzione di partizione funzioni nel modo previsto per tutte le lingue di sessione, è consigliabile utilizzare costanti interpretate nello stesso modo per le impostazioni di tutte le lingue, ad esempio il formato aaaammgg, oppure convertire esplicitamente i valori letterali in uno stile specifico. Per ulteriori informazioni, vedere Scrittura di istruzioni Transact-SQL internazionali. Per determinare la lingua di sessione del server, eseguire SELECT @@LANGUAGE.

  • ...n
    Specifica il numero di valori forniti da boundary_value (il massimo è 999). Il numero di partizioni create è uguale a n + 1. Non è necessario elencare i valori in ordine. Se i valori non sono in ordine, Motore di database li ordina, crea la funzione e restituisce un avviso che informa che i valori non sono in ordine. Viene restituito un errore se n include valori duplicati.

  • LEFT | RIGHT
    Specifica il lato (sinistro o destro) di ogni intervallo di valori limite a cui appartiene boundary_value [ ,...n ], quando i valori dell'intervallo vengono ordinati da Motore di database in senso crescente da sinistra a destra. Se omesso, il valore predefinito è LEFT. Per ulteriori informazioni, vedere Esempi.

Osservazioni

L'ambito di una funzione di partizione è limitato al database in cui la funzione è stata creata. Nel database le funzioni di partizione sono contenute in uno spazio dei nomi distinto rispetto alle altre funzioni.

Tutte le righe la cui colonna di partizionamento contiene valori NULL vengono inserite nella prima partizione a sinistra, a meno che non sia specificato NULL come valore limite e indicato RIGHT. In questo caso la prima partizione a sinistra sarà una partizione vuota e i valori NULL verranno inseriti nella partizione successiva.

Autorizzazioni

Per eseguire CREATE PARTITION FUNCTION è possibile utilizzare qualsiasi delle autorizzazioni seguenti:

  • Autorizzazione ALTER ANY DATASPACE. Questa autorizzazione viene assegnata per impostazione predefinita ai membri del ruolo predefinito del server sysadmin e dei ruoli predefiniti del database db_owner e db_ddladmin.

  • Autorizzazione CONTROL o ALTER per il database in cui viene creata la funzione di partizione.

  • Autorizzazione CONTROL SERVER o ALTER ANY DATABASE per il server del database in cui viene creata la funzione di partizione.

Esempi

A. Creazione di una funzione di partizione RANGE LEFT in una colonna int

La funzione di partizione seguente crea quattro partizioni in una tabella o un indice.

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

Nella tabella seguente viene illustrato come verrebbe partizionata una tabella che utilizza questa funzione di partizione nella colonna di partizionamento col1.

Partizione

1

2

3

4

Valori

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <=1000

col1 > 1000

B. Creazione di una funzione di partizione RANGE RIGHT in una colonna int

Nella funzione di partizione seguente vengono utilizzati gli stessi valori di boundary_value [ ,...n ] dell'esempio precedente, con la differenza che viene specificato RANGE RIGHT.

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

Nella tabella seguente viene illustrato come verrebbe partizionata una tabella che utilizza questa funzione di partizione nella colonna di partizionamento col1.

Partizione

1

2

3

4

Valori

col1 < 1

col1 >= 1 AND col1 < 100

col1 >= 100 AND col1 < 1000

col1 >= 1000

C. Creazione di una funzione di partizione RANGE RIGHT in una colonna datetime

Nella funzione di partizione seguente viene partizionato un indice o una tabella in 12 partizioni, una per ogni mese dei valori di un anno in una colonna datetime.

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

Nella tabella seguente viene illustrato come verrebbe partizionato un indice o una tabella che utilizza questa funzione di partizione nella colonna di partizionamento datecol.

Partizione

1

2

...

11

12

Valori

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. Creazione di una funzione di partizione in una colonna char

La funzione di partizione seguente crea quattro partizioni in una tabella o un indice.

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

Nella tabella seguente viene illustrato come verrebbe partizionata una tabella che utilizza questa funzione di partizione nella colonna di partizionamento col1.

Partizione

1

2

3

4

Valori

col1 < EX...

col1 >= EX AND col1 < RXE...

col1 >= RXE AND col1 < XR...

col1 >= XR