Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Změny schématu a indexu v tabulkách optimalizovaných pro paměť lze provádět pomocí příkazu ALTER TABLE. V SQL Server 2016 a Azure SQL Database jsou operace ALTER TABLE na tabulkách optimalizovaných pro paměť offline, což znamená, že tabulka není dostupná pro dotazování během probíhající operace. Databázová aplikace může pokračovat ve spuštění a všechny operace, které přistupují k tabulce, se zablokují, dokud se proces změny nedokončí. V jednom příkazu ALTER TABLE je možné kombinovat více operací ADD, DROP nebo ALTER.
Důležité
Spravovaná instance Azure SQL nepodporuje tabulky optimalizované pro paměť na úrovni služby Pro obecné účely.
ALTEROVÝ STŮL
Syntaxe ALTER TABLE slouží k provádění změn schématu tabulky a také k přidávání, odstraňování a opětovnému sestavení indexů. Indexy jsou považovány za součást definice tabulky:
Syntaxe ALTER TABLE ... ADD/DROP/ALTER INDEX je podporována pouze pro tabulky optimalizované pro paměť.
Bez použití příkazu ALTER TABLE nejsou příkazy CREATE INDEX, DROP INDEX, ALTER INDEX a PAD_INDEX podporovány pro indexy v tabulkách optimalizovaných pro paměť.
Podporují se následující typy změn:
Změna počtu kbelíků
Přidání a odebrání indexu
Změna, přidání a odebrání sloupce
Přidání a odebrání omezení
Další informace o funkcích ALTER TABLE a úplné syntaxi naleznete v tématu ALTER TABLE (Transact-SQL)
Závislost vázaná na schéma
cs-CZ: Nativně kompilované uložené procedury musí být vázané na schéma, což znamená, že mají závislost na schématu u tabulek optimalizovaných pro paměť, ke kterým přistupují, a sloupců, na které odkazují. Závislost vázaná na schéma je vztah mezi dvěma entitami, které brání vyřazení nebo nekompatibilní úpravě odkazované entity, pokud existuje odkazující entita.
Pokud například nativně zkompilovaná uložená procedura vázané na schéma odkazuje na sloupec c1 z tabulky, sloupec c1 nelze vynechat. Podobně platí, že pokud existuje taková procedura s příkazem INSERT bez seznamu sloupců (např INSERT INTO dbo.mytable VALUES (...). ), nelze v tabulce vynechat žádný sloupec.
Protokolování ALTER TABLE v tabulkách optimalizovaných pro paměť
V tabulce optimalizované pro paměť se většina scénářů ALTER TABLE nyní spouští paralelně a vede k optimalizaci zápisů do transakčního protokolu. Optimalizace se dosahuje pouze protokolováním změn metadat do transakčního protokolu. Následující operace ALTER TABLE však běží jednovláknově a nejsou optimalizovány pro logy.
Operace s jedním vláknem v tomto případě by protokolovala celý obsah změněné tabulky do transakčního protokolu. Seznam operací s jedním vláknem:
Změna nebo přidání sloupce pro použití velkého typu objektu (LOB): nvarchar(max), varchar(max) nebo varbinary(max).
Přidání nebo vyřazení indexu COLUMNSTORE
Téměř cokoli, co má vliv na sloupec mimo řádek.
- Způsobí, že se sloupec na řádku přesune mimo řádek.
- Způsobí, že se sloupec mimo řádek přesune na řádek.
- Vytvořte nový sloupec mimo řádek.
- Výjimka: Prodloužení sloupce, který je již mimo standardní řádek, je zaznamenáno optimalizovaným způsobem.
Examples
Následující příklad změní počet kbelíků existujícího indexu hash. Tím se index hash znovu sestaví s novým počtem kontejnerů, zatímco ostatní vlastnosti indexu hash zůstanou stejné.
ALTER TABLE Sales.SalesOrderDetail_inmem
ALTER INDEX imPK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID
REBUILD WITH (BUCKET_COUNT=67108864);
GO
Následující příklad přidá sloupec s omezením NOT NULL a s výchozí definicí a pomocí funkce WITH VALUES poskytne hodnoty pro každý existující řádek v tabulce. Pokud se funkce WITH VALUES nepoužívá, má každý řádek hodnotu NULL v novém sloupci.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD Comment NVARCHAR(100) NOT NULL DEFAULT N'' WITH VALUES;
GO
Následující příklad přidá omezení primárního klíče do existujícího sloupce.
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
Následující příklad odebere index.
ALTER TABLE Sales.SalesOrderDetail_inmem
DROP INDEX ix_ModifiedDate;
GO
Následující příklad přidá index.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD INDEX ix_ModifiedDate (ModifiedDate);
GO
Následující příklad přidá více sloupců s indexem a omezeními.
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