Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
A memóriaoptimalizált táblák séma- és indexmódosításai az ALTER TABLE utasítással végezhetők el. Az SQL Server 2016-ban és az Azure SQL Database ALTER TABLE műveletei a memóriaoptimalizált táblákon OFFLINE állapotban vannak, ami azt jelenti, hogy a tábla nem érhető el lekérdezésre, amíg a művelet folyamatban van. Az adatbázis-alkalmazás továbbra is futtatható, és a táblához hozzáférő összes művelet le lesz tiltva a módosítási folyamat befejezéséig. Egyetlen ALTER TABLE utasításban több ADD, DROP vagy ALTER műveletet is kombinálhat.
Fontos
A felügyelt Azure SQL-példány nem támogatja a memóriaoptimalizált táblákat az Általános célú szolgáltatásszinten.
ALTERNATÍV TÁBLÁZAT
Az ALTER TABLE szintaxis a táblaséma módosítására, valamint indexek hozzáadására, törlésére és újraépítésére szolgál. Az indexek a tábladefiníció részét képezik:
Csak a memóriaoptimalizált táblák esetében támogatott az ALTER TABLE ... ADD/DROP/ALTER INDEX szintaxis.
ALTER TABLE utasítás használata nélkül a CREATE INDEX, DROP INDEX, ALTER INDEX és PAD_INDEX utasítás nem támogatott a memóriaoptimalizált táblák indexeihez.
A következő típusú módosítások támogatottak:
A gyűjtők számának módosítása
Index hozzáadása és eltávolítása
Oszlop módosítása, hozzáadása és eltávolítása
Kényszer hozzáadása és eltávolítása
További információ az ALTER TABLE funkcióról és a teljes szintaxisról: ALTER TABLE (Transact-SQL)
Sémaalapú függőség
A natívan lefordított tárolt eljárásoknak sémaalapúnak kell lenniük, ami azt jelenti, hogy sémafüggők az általuk elért memóriaoptimalizált tábláktól és az általuk hivatkozott oszlopoktól. A sémaalapú függőség két entitás közötti kapcsolat, amely megakadályozza a hivatkozott entitás elvetését vagy inkompatibilis módosítását mindaddig, amíg a hivatkozó entitás létezik.
Ha például egy sémához kötött natívan lefordított tárolt eljárás a táblából származó c1 oszlopra hivatkozik, a c1 oszlopot nem lehet elvetni. Hasonlóképpen, ha létezik olyan eljárás, amely egy INSERT utasítást tartalmaz oszloplista nélkül (például INSERT INTO dbo.mytable VALUES (...)), így a tábla egyetlen oszlopa sem törölhető.
Az ALTER TABLE naplózása memóriaoptimalizált táblákon
A memóriaoptimalizált táblán a legtöbb ALTER TABLE-forgatókönyv már párhuzamosan fut, és az írások optimalizálását eredményezheti a tranzakciónaplóba. Az optimalizálás úgy érhető el, hogy csak a tranzakciónapló metaadatainak változásait naplózza. Az alábbi ALTER TABLE-műveletek azonban egyszálasak, és nem naplóoptimalizáltak.
Ebben az esetben az egyszálas művelet a módosított tábla teljes tartalmát naplózza a tranzakciónaplóba. Az egyszálas műveletek listája a következő:
Módosítsa vagy adjon hozzá egy oszlopot egy nagy objektumtípus (LOB) használatához: nvarchar(max), varchar(max) vagy varbinary(max).
OSZLOPCSOOPRTOS index hozzáadása vagy eltávolítása.
Szinte bármi, ami egy soron kívüli oszlopot érint.
- A sorban lévő oszlopot áthelyezhetjük a sorközi pozícióból.
- Soron kívüli oszlopot sorba helyez.
- Hozzon létre egy új soron kívüli oszlopot.
- Kivétel: A már soron kívüli oszlop hosszabbítását a rendszer optimalizált módon naplózza.
Példák
Az alábbi példa egy meglévő kivonatindex gyűjtőszámát módosítja. Ez újraépíti a kivonatindexet az új gyűjtőszámmal, míg a kivonatindex más tulajdonságai változatlanok maradnak.
ALTER TABLE Sales.SalesOrderDetail_inmem
ALTER INDEX imPK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID
REBUILD WITH (BUCKET_COUNT=67108864);
GO
Az alábbi példa egy NOT NULL kényszerű és ALAPÉRTELMEZETT definícióval rendelkező oszlopot ad hozzá, és a WITH VALUES függvény használatával adja meg a táblázat minden meglévő sorához tartozó értékeket. Ha a WITH VALUES nem használatos, minden sorban a NULL érték szerepel az új oszlopban.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD Comment NVARCHAR(100) NOT NULL DEFAULT N'' WITH VALUES;
GO
Az alábbi példa egy elsődleges kulcskényszert ad hozzá egy meglévő oszlophoz.
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
Az alábbi példa eltávolít egy indexet.
ALTER TABLE Sales.SalesOrderDetail_inmem
DROP INDEX ix_ModifiedDate;
GO
Az alábbi példa egy indexet ad hozzá.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD INDEX ix_ModifiedDate (ModifiedDate);
GO
Az alábbi példa több oszlopot ad hozzá indexekkel és korlátozásokkal.
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