Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Mevcut veritabanında, bir tablo veya indeksin satırlarını belirli bir sütunun değerlerine göre bölümlere eşleyen bir fonksiyon oluşturur. CREATE PARTITION FUNCTION kullanmak, bölümlenmiş bir tablo veya indeks oluşturmanın ilk adımıdır. Bir tablo veya indeks en fazla 15.000 bölüme sahip olabilir.
Transact-SQL söz dizimi kuralları
Sözdizimi
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]
Arguments
partition_function_name
Bölümleme fonksiyonunun adıdır. Bölüm fonksiyon adları veritabanı içinde benzersiz olmalı ve tanımlayıcı kurallarına uygun olmalıdır.
input_parameter_type
Bölümleme için kullanılan sütunun veri tipidir. Tüm veri türleri metin,ntext, image, xml, timestamp, varchar(max), varbinary(max), alias veri tipleri veya CLR kullanıcı tanımlı veri türleri hariç bölümleme sütunu olarak kullanılmak için geçerlidir.
Gerçek sütun, yani bölümleme sütunu olarak bilinir ve CREATE TABLE veya CREATE INDEX ifadesinde belirtilir.
boundary_value
partition_function_name kullanan bölümlenmiş bir tablo veya indeksin her bölümü için sınır değerlerini belirtir.
Eğer boundary_value boşsa, bölüm fonksiyonu tüm tabloyu veya indeksi partition_function_name kullanarak tek bir bölüme eşler. Yalnızca CREATE TABLE veya CREATE INDEX ifadesinde belirtilen tek bir bölümleme sütunu kullanılabilir.
boundary_value , değişkenlere referans verebilen sabit bir ifadedir. Bu, kullanıcı tanımlı tür değişkenleri veya fonksiyonlar ve kullanıcı tanımlı fonksiyonları kapsar. Transact-SQL ifadelere referans veremez. boundary_value ya input_parameter_type'de sağlanan veri tipine örtük olarak dönüştürülebilir olmalı ve örtük dönüşüm sırasında değerin boyutu ve ölçeği, karşılık gelen input_parameter_type ile eşleşmediği şekilde kısaltılamaz.
Uyarı
Eğer boundary_valuedatetime veya küçük datetime literallerinden oluşuyorsa, bu literaller us_english oturum dili olduğu varsayılarak değerlendirilir. Bu davranış geçersiz sayılır. Tüm oturum dilleri için bölüm fonksiyonu tanımının beklendiği gibi davrandığından emin olmak için, yyyymmdd formatı gibi tüm dil ayarları için aynı şekilde yorumlanan sabitleri kullanmanızı öneririz; ya da kelime harfesini açıkça belirli bir stile dönüştürebilir. Sunucunuzun dil oturumunu belirlemek için SELECT @@LANGUAGE.
Daha fazla bilgi için bkz. Değişmez tarih dizelerini DATE değerlerine dönüştürme.
... n
boundary_value tarafından sağlanan değer sayısını, 14.999'u aşmaması için belirtir. Oluşturulan bölüm sayısı n + 1'e eşittir. Değerlerin sırayla listelenmesi gerekmez. Değerler sıralı değilse, Veritabanı Motoru bunları sıralar, fonksiyonu oluşturur ve değerlerin sırayla sağlanmadığına dair uyarı verir. Veritabanı Motoru, n herhangi bir tekrarlanmış değer içeriyorsa hata döndürür.
SOL | SAĞ
Her sınır değer aralığının hangi tarafında, sol ya da sağ, boundary_value [ ,... n ] ait, aralık değerleri Veritabanı Motoru tarafından soldan sağa artan sırayla sıralandığında. Belirtilmediyse, SOL varsayılan olarak belirlenir.
Açıklamalar
Bir bölüm fonksiyonunun kapsamı, oluşturulduğu veritabanıyla sınırlıdır. Veritabanı içinde, bölümleme fonksiyonları diğer fonksiyonlardan ayrı bir isim alanında yer alır.
Bölümleme sütununda null değerler olan tüm satırlar, sınır değeri olarak NULL belirtilmedikçe ve RIGHT belirtilmedikçe en soldaki bölüme yerleştirilir. Bu durumda, en soldaki bölüm boş bir bölümdür ve NULL değerleri aşağıdaki bölüme yerleştirilir.
Permissions
Aşağıdaki izinlerden herhangi biri BÖLÜM OLUŞTUR FONKSIYONUNU çalıştırmak için kullanılabilir:
HERHANGİ BİR DATASPACE İZNİNİ DEĞİŞTİRİN. Bu izin varsayılan olarak sysadmin sabit sunucu rolü ile db_owner ve db_ddladmin sabit veritabanı rollerinin üyelerine verilir.
Bölüm fonksiyonunun oluşturulduğu veritabanında CONTROL veya ALTER izni.
Bölüm fonksiyonunun oluşturulduğu veritabanı sunucusunda CONTROL SERVER veya DETER DATABASE iznini değiştirin.
Örnekler
A. Bir int sütununda RANGE LEFT bölüm fonksiyonu oluşturmak
Aşağıdaki bölümleme fonksiyonu, bir tabloyu veya indeksi dört bölüme ayıracaktır.
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
Aşağıdaki tablo, col1 sütununu bölmek için bu bölümleme fonksiyonunu kullanan bir tablonun nasıl bölüneceğini göstermektedir.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Değerler |
col1<= 1 |
col1>1 VE col1<= 100 |
col1>100 VE col1<=1000 |
col1>1000 |
B. Bir int sütununda RANGE RIGHT bölümleme fonksiyonu oluşturmak
Aşağıdaki bölümleme fonksiyonu boundary_value için aynı değerleri kullanır [ ,... n ] önceki örnek gibi, ancak RANGE RIGHT belirtir.
CREATE PARTITION FUNCTION myRangePF2 (int)
AS RANGE RIGHT FOR VALUES (1, 100, 1000);
Aşağıdaki tablo, col1 sütununu bölmek için bu bölümleme fonksiyonunu kullanan bir tablonun nasıl bölüneceğini göstermektedir.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Değerler |
col1<1 |
col1>= 1 VE col1<100 |
col1>= 100 VE col1<1000 |
col1>= 1000 |
C. Bir tarih saati sütununda RANGE RIGHT bölüm fonksiyonu oluşturmak
Aşağıdaki bölümleme fonksiyonu, bir tabloyu veya indeksi 12 bölüme ayırır; bu bölüm, bir tarih saati sütunundaki bir yılın değerlerinin her ayı için bir parça olur.
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, sütun datecol'u bölümlemede bu bölümleme fonksiyonunu kullanan bir tablo veya indeksin nasıl bölüneceğini göstermektedir.
| Partition | 1 | 2 | ... | 11 | 12 |
|---|---|---|---|---|---|
| Değerler |
datecol<February 1, 2003 |
datecol>= February 1, 2003 VE datecol<March 1, 2003 |
datecol>= November 1, 2003 VE col1<December 1, 2003 |
datecol>= December 1, 2003 |
D. Bir karakter sütununda bir bölümleme fonksiyonu oluşturmak
Aşağıdaki bölümleme fonksiyonu, bir tabloyu veya indeksi dört bölüme böler.
CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
Aşağıdaki tablo, col1 sütununu bölmek için bu bölümleme fonksiyonunu kullanan bir tablonun nasıl bölüneceğini göstermektedir.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Değerler |
col1<EX... |
col1>= EX VE col1<RXE... |
col1>= RXE VE col1<XR... |
col1>= XR |
E. 15.000 bölüm oluşturmak
Aşağıdaki bölümleme fonksiyonu, bir tabloyu veya indeksi 15.000 bölüme böler.
--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. Yıllarca bölümler oluşturmak
Aşağıdaki bölüm fonksiyonu, bir tabloyu veya indeksi datetime2 sütununda 50 bölüme böler. Ocak 2007 ile Ocak 2011 arasındaki her ay için bir bölüm vardır.
--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
Sonraki Adımlar
Tablo bölmesi ve ilgili kavramlar hakkında daha fazla bilgi edinmek için aşağıdaki makalelerde bilgi edinebilirsiniz: