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
Bellek için iyileştirilmiş tablolarda şema ve dizin değişiklikleri ALTER TABLE deyimi kullanılarak gerçekleştirilebilir. SQL Server 2016 ve Azure SQL Veritabanı’nda, bellek için iyileştirilmiş tablolarda yapılan ALTER TABLE işlemleri ÇEVRİMDIŞI gerçekleştirilir. Bu, işlem devam ederken tablonun sorgulama için kullanılamayacağı anlamına gelir. Veritabanı uygulaması çalışmaya devam edebilir ve tabloya erişen tüm işlemler, değişiklik işlemi tamamlanana kadar engellenir. Birden çok ADD, DROP veya ALTER işlemi tek bir ALTER TABLE deyiminde birleştirilebilir.
Önemli
Azure SQL Yönetilen Örneği, Genel Amaçlı hizmet katmanında bellek için iyileştirilmiş tabloları desteklemez.
ALTER TABLE
ALTER TABLE söz dizimi, hem tablo şemasında değişiklik yapmak hem de dizinleri eklemek, silmek ve yeniden oluşturmak için kullanılır. Dizinler tablo tanımının bir parçası olarak kabul edilir:
ALTER TABLE sözdizimi ... ADD/DROP/ALTER INDEX yalnızca bellek ile iyileştirilmiş tablolar için desteklenir.
ALTER TABLE deyimi kullanılmadan CREATE INDEX, DROP INDEX, ALTER INDEX ve PAD_INDEX deyimleri bellek için iyileştirilmiş tablolardaki dizinler için desteklenmez.
Aşağıdaki değişiklik türleri desteklenir:
Demet sayısını değiştirme
Dizin ekleme ve kaldırma
Bir sütunu değiştirmek, eklemek ve kaldırmak
Kısıtlama ekleme ve kaldırma
ALTER TABLE işlevselliği ve tam söz dizimi hakkında daha fazla bilgi için bkz. ALTER TABLE (Transact-SQL)
Şemaya Bağlı Bağımlılık
Yerel olarak derlenmiş saklı yordamların şemaya bağlı olması gerekir; yani, şemaya bağlı olarak bellek ile iyileştirilmiş tablolara ve başvurdukları sütunlara bağımlıdırlar. Şemaya bağlı bağımlılık, başvuruda bulunan varlığın mevcut olduğu sürece bırakılmasını veya uyumsuz olarak değiştirilmesini engelleyen iki varlık arasındaki ilişkidir.
Örneğin, şemaya bağlı yerel olarak derlenmiş saklı yordam c1 sütununa, mytable tablosundan başvuruyorsa, c1 sütunu bırakılamaz. Benzer şekilde, sütun listesi olmayan insert deyimine sahip böyle bir yordam varsa (örn. INSERT INTO dbo.mytable VALUES (...)), tablodaki hiçbir sütun bırakılamaz.
Bellek için optimize edilmiş tablolarda ALTER TABLE işleminin günlüğe kaydedilmesi
Bellek için iyileştirilmiş bir tabloda, ALTER TABLE senaryolarının çoğu artık paralel olarak çalışır ve işlem günlüğüne yazma işlemlerinin en iyi duruma getirilmesiyle sonuçlanır. İyileştirme yalnızca meta veri değişikliklerini işlem günlüğüne kaydederek elde edilir. Ancak, aşağıdaki ALTER TABLE işlemleri tek iş parçacıklı olarak çalıştırılır ve günlük kaydı için optimize edilmemiştir.
Bu durumda tek iş parçacıklı işlem, değiştirilen tablonun içeriğinin tamamını işlem günlüğüne kaydeder. Tek iş parçacıklı işlemler listesi aşağıda verilmiştir:
Büyük nesne (LOB) türünü kullanmak için sütunu değiştirin veya ekleyin: nvarchar(max), varchar(max) veya varbinary(max).
COLUMNSTORE dizini ekleyin veya bırakın.
Satır dışı bir sütunu etkileyen hemen hemen her şey.
- Satır içindeki bir sütunun satır dışına taşınmasına neden olur.
- Satır dışındaki bir sütunun satır içine taşınmasına neden olur.
- Yeni bir satır dışı sütun oluşturun.
- İstisna: Halihazırda satırdan çıkarılmış bir sütunu genişletmek, optimize edilmiş şekilde kayda alınır.
Örnekler
Aşağıdaki örnek, mevcut karma dizinin demet sayısını değiştirir. Bu, karma dizinin diğer özellikleri aynı kalırken karma dizini yeni demet sayısıyla yeniden oluşturur.
ALTER TABLE Sales.SalesOrderDetail_inmem
ALTER INDEX imPK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID
REBUILD WITH (BUCKET_COUNT=67108864);
GO
Aşağıdaki örnek, NOT NULL kısıtlamasına ve DEFAULT tanımına sahip bir sütun ekler ve tablodaki mevcut her satır için değer sağlamak için WITH VALUES kullanır. WITH VALUES kullanılmazsa, her satır yeni sütunda NULL değeri alır.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD Comment NVARCHAR(100) NOT NULL DEFAULT N'' WITH VALUES;
GO
Aşağıdaki örnek, var olan bir sütuna birincil anahtar kısıtlaması ekler.
CREATE TABLE dbo.UserSession (
SessionId int not null,
UserId int not null,
CreatedDate datetime2 not null,
ShoppingCartId int,
index ix_UserId nonclustered hash (UserId) with (bucket_count=400000)
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY) ;
GO
ALTER TABLE dbo.UserSession
ADD CONSTRAINT PK_UserSession PRIMARY KEY NONCLUSTERED (SessionId);
GO
Aşağıdaki örnek bir dizini kaldırır.
ALTER TABLE Sales.SalesOrderDetail_inmem
DROP INDEX ix_ModifiedDate;
GO
Aşağıdaki örnek bir dizin ekler.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD INDEX ix_ModifiedDate (ModifiedDate);
GO
Aşağıdaki örnek, dizin ve kısıtlamalar içeren birden çok sütun ekler.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD CustomerID int NOT NULL DEFAULT -1 WITH VALUES,
ShipMethodID int NOT NULL DEFAULT -1 WITH VALUES,
INDEX ix_Customer (CustomerID);
GO