PARTITION FUNCTION (Transact-sql) oluştur
Geçerli veritabanında belirtilen sütun değerlerine dayalı bölümlere bir tablo veya dizin satırları eşleştiren bir işlev oluşturur. create PARTITION işlevi kullanılarak bölümlenmiş tablo veya dizin oluşturmanın ilk adımı olduğunu. De SQL Server 2012, bir tablo veya dizin-ebilmek-si olmak en fazla 15,000 bölüm.
Transact-SQL Sözdizim Kuralları
Sözdizimi
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]
Bağımsız değişkenler
partition_function_name
Bölüm işlevi addır. Bölüm işlev adları veritabanı içinde benzersiz olmalı ve için olan kurallara uymak tanımlayıcıları.input_parameter_type
Bölümleme için kullanılan sütun veri türüdür. Tüm veri türleri dışında sütunlar, bölümleme olarak kullanılmak için geçerli text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), diğer veri türleri veya clr kullanıcı tanımlı veri türleri.Bölümleme sütun olarak, bilinen gerçek sütun create table veya create INDEX deyimi içinde belirtilir.
boundary_value
Bölümlenmiş tablo veya dizin kullanan her bölüm için sınır değerleri belirtir partition_function_name. Eğer boundary_valueolduğu bölüm işlevi tüm tablo ya da dizini kullanarak boş haritalar partition_function_nametek bir bölüm haline. create table veya create INDEX deyiminde belirtilen tek bir bölümleme sütununda kullanılabilir.boundary_valuedeğişkenleri başvuru sürekli bir ifadesidir. Bu, kullanıcı tanımlı türü değişkenleri veya işlevleri ve kullanıcı tanımlı işlevler içerir. Başvuru yapamazsınız Transact-SQLifadeler. boundary_valuemaç veya sağlanan veri türüne örtük olarak dönüştürülebilir input_parameter_typeve boyut ve ölçek değeri eşleşmiyor ki, onun karşılık gelen bir şekilde örtük dönüştürme sırasında kesilmiş olamaz input_parameter_type.
[!NOT]
Eğer boundary_valueoluşan datetimeya smalldatetimerakamları, bu harflerin varsayılarak us_english oturum dildir değerlendirilir. Bu davranış önerilmemektedir. Bölüm işlev tanımının tüm oturum diller için beklendiği gibi davranır emin olmak için tüm dil ayarları, yyyyaagg biçimi gibi aynı şekilde yorumlanır sabitleri kullanmanız önerilir; veya belirli bir stil için harfleri açıkça dönüştürebilirsiniz. Dil oturum sunucunuzun belirlemek için çalıştırın SELECT @@LANGUAGE.
...n
Tarafından sağlanan değerleri sayısını belirtir boundary_value, 14,999 aşamaz. Oluşturulan bölüm sayısı eşittir n+ 1. Değerleri sırayla listelenmesi gerekmez. Değerler sırayla değilse Veritabanı Altyapısıonları sıralar, işlev oluşturur ve sırayla değerleri sağlanmayan bir uyarı verir. Veritabanı Altyapısı hata döndürür nherhangi bir yinelenen değerler içerir.LEFT | SAĞ
Her sınır değer aralığı, sola veya sağa, hangi tarafa belirtir boundary_value ,...n aralığı değerleri olarak sıralandığında, ait olduğu Veritabanı Altyapısıartan sırada soldan sağa doğru. Aksi takdirde belirtilen, null varsayılan değerdir.
Açıklamalar
Bölüm işlevi kapsamı içinde oluşturulan veritabanı sınırlıdır. Veritabanının içinde bölüm işlevleri ayrı bir ad alanından diğer işlevleri bulunması.
Bölümleme sütun null değerlere sahip satırlar en soldaki bölümde bir sınır değer olarak null belirtilirse ve sağ belirtildiği sürece yerleştirilir. Bu durumda, en soldaki bölümü boş bir bölümdür ve null değerleri aşağıdaki bölümde yer alıyor.
İzinler
create PARTITION FUNCTION yürütmek için aşağıdaki izinlerden herhangi biri kullanılabilir:
HIÇBIR dataspace alter izni. Bu izni üyeleri için varsayılan sysadmin sabit sunucu rolü ve db_owner ve db_ddladmin veritabanı rolleri sabit.
Denetim veya bölüm işlevi oluşturulmaktadır veritabanı üzerinde alter izni.
Bölüm işlevi oluşturulmaktadır veritabanının control server veya alter any database izni sunucu üzerinde.
Örnekler
A.ARALIĞIN sol bölüm işlevi bir int sütun oluşturma
Aşağıdaki bölüm işlevi bir tablo ya da dizin dört bölüm bölüm.
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
Bölümleme sütun üzerinde bu bölümü işlevini kullanan bir tablo nasıl gösterir aşağıdaki tabloda col1 bölümlenmesi.
Bölüm |
1 |
2 |
3 |
4 |
---|---|---|---|---|
Değerleri |
col1 <=1 |
col1 > 1 AND col1 <=100 |
col1 > 100 AND col1 <=1000 |
col1> 1000 |
B.SAĞ bölüm işlevi bir int sütun oluşturma
Aşağıdaki bölüm işlevi için aynı değerleri kullanır boundary_value ,...n sağ belirtir dışında önceki örnek olarak.
CREATE PARTITION FUNCTION myRangePF2 (int)
AS RANGE RIGHT FOR VALUES (1, 100, 1000);
Bölümleme sütun üzerinde bu bölümü işlevini kullanan bir tablo nasıl gösterir aşağıdaki tabloda col1 bölümlenmesi.
Bölüm |
1 |
2 |
3 |
4 |
---|---|---|---|---|
Değerleri |
col1 < 1 |
col1 >= 1 AND col1 < 100 |
col1 >= 100 AND col1 < 1000 |
col1 >=1000 |
C.SAĞ bölüm işlevi bir datetime sütun oluşturma
Aşağıdaki bölüm işlevi 12 bölümlerinde, her ay bir yıl değer değerleri bir tablo veya dizin bölümlerini bir datetimesütun.
CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
'20030501', '20030601', '20030701', '20030801',
'20030901', '20031001', '20031101', '20031201');
Aşağıdaki tablo veya bölümleme sütun üzerinde bu bölümü işlevini kullanan dizin nasıl gösterir tablo datecol bölümlenmesi.
Bölüm |
1 |
2 |
... |
11 |
12 |
---|---|---|---|---|---|
Değerleri |
datecol < February 1, 2003 |
datecol>= February 1, 2003ve datecol < March 1, 2003 |
datecol >= November 1, 2003 AND col1 < December 1, 2003 |
col1 >=December 1, 2003 |
D.Bölüm işlevi bir char sütunu oluşturma
Aşağıdaki bölüm işlevi bir tablo ya da dizin dört bölümler.
CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
Bölümleme sütun üzerinde bu bölümü işlevini kullanan bir tablo nasıl gösterir aşağıdaki tabloda col1 bölümlenmesi.
Bölüm |
1 |
2 |
3 |
4 |
---|---|---|---|---|
Değerleri |
col1 < EX... |
col1 >= EX AND col1 < RXE... |
col1 >= RXE AND col1 < XR... |
col1 >=XR |
E.15.000 Bölümleri oluşturma
Aşağıdaki bölüm işlevi bir tablo ya da dizin 15.000 bölümler.
--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.Çoklu yıl bölümleri oluşturma
Aşağıdaki bölüm işlevi bir tablo ya da dizin 50 üzerinde bölümler bir datetime2sütun. Ocak 2007 ve Ocak 2011 arasında her ay bir bölüm yoktur.
--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
Ayrıca bkz.
Başvuru
alter PARTITION FUNCTION (Transact-sql)
PARTITION FUNCTION (Transact-sql) bırak
PARTITION düzeni (Transact-sql) oluştur
sys.partition_functions (Transact-sql)
sys.partition_parameters (Transact-sql)
sys.partition_range_values (Transact-sql)