Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Alterações de esquema e índice em tabelas otimizadas para memória podem ser realizadas usando a instrução ALTER TABLE. No SQL Server 2016 e Azure SQL Database Database, as operações ALTER TABLE em tabelas otimizadas para memória são OFFLINE, o que significa que a tabela não está disponível para consulta enquanto a operação está em curso. A aplicação de base de dados pode continuar a funcionar, e qualquer operação que aceda à tabela é bloqueada até que o processo de alteração seja concluído. É possível combinar múltiplas operações ADD, DROP ou ALTER numa única instrução ALTER TABLE.
Importante
O Azure SQL Managed Instance não suporta tabelas otimizadas para memória no nível de serviço de uso geral.
ALTER TABLE
A sintaxe ALTER TABLE é usada para fazer alterações ao esquema da tabela, bem como para adicionar, eliminar e reconstruir índices. Os índices são considerados parte da definição da tabela:
A sintaxe ALTER TABLE ... ADD/DROP/ALTER INDEX é suportada apenas para tabelas otimizadas para memória.
Sem usar uma instrução ALTER TABLE, as instruções CREATE INDEX, DROP INDEX, ALTER INDEX e PAD_INDEX não são suportadas para índices em tabelas otimizadas para memória.
São suportados os seguintes tipos de alterações:
Alteração do número de baldes
Adicionar e remover um índice
Alteração, adição e remoção de uma coluna
Adicionar e remover uma restrição
Para mais informações sobre a funcionalidade do ALTER TABLE e a sintaxe completa, veja ALTER TABLE (Transact-SQL)
Dependência vinculada ao esquema
Os procedimentos armazenados compilados nativamente têm de ser vinculados por esquema, o que significa que possuem uma dependência vinculada ao esquema nas tabelas otimizadas em memória a que acedem e nas colunas que referenciam. Uma dependência limitada a esquemas é uma relação entre duas entidades que impede que a entidade referenciada seja abandonada ou modificada de forma incompatível enquanto a entidade referenciadora existir.
Por exemplo, se um procedimento armazenado compilado nativamente ligado a esquemas referenciar uma coluna c1 da tabela mytable, a coluna c1 não pode ser eliminada. De forma semelhante, se existir tal procedimento com uma instrução INSERT sem lista de colunas (por exemplo, INSERT INTO dbo.mytable VALUES (...)), então nenhuma coluna na tabela pode ser eliminada.
Registo do ALTER TABLE em tabelas otimizadas para memória
Numa tabela otimizada para memória, a maioria dos cenários ALTER TABLE agora corre em paralelo e resulta numa otimização das escritas no registo de transações. A otimização é conseguida apenas registando as alterações de metadados no registo de transações. No entanto, as seguintes operações ALTER TABLE correm de forma monothread e não são otimizadas para logs.
A operação single-threaded, neste caso, registaria todo o conteúdo da tabela alterada no registo de transações. Segue-se uma lista de operações monothread:
Altere ou adicione uma coluna para usar um objeto grande (LOB) do tipo: nvarchar(max), varchar(max) ou varbinary(max).
Adicione ou elimine um índice COLUMNSTORE.
Quase tudo o que afeta uma coluna fora da linha.
- Faz com que uma coluna na linha se mova para fora da linha.
- Cause uma coluna fora da linha a mover-se para a linha.
- Crie uma nova coluna fora da linha padrão.
- Exceção: O alongamento de uma coluna já fora da linha é registado da forma otimizada.
Examples
O exemplo seguinte modifica o número de buckets de um índice de dispersão existente. A operação reconstrói o índice de hash com a nova contagem de buckets, enquanto as outras propriedades do índice de hash permanecem iguais.
ALTER TABLE Sales.SalesOrderDetail_inmem
ALTER INDEX imPK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID
REBUILD WITH (BUCKET_COUNT=67108864);
GO
O exemplo seguinte adiciona uma coluna com uma restrição NOT NULL e com uma definição DEFAULT, e usa WITH VALUES para fornecer valores para cada linha existente na tabela. Se WITH VALUES não for usado, cada linha tem o valor NULL na nova coluna.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD Comment NVARCHAR(100) NOT NULL DEFAULT N'' WITH VALUES;
GO
O exemplo seguinte adiciona uma restrição de chave primária a uma coluna existente.
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
O exemplo seguinte remove um índice.
ALTER TABLE Sales.SalesOrderDetail_inmem
DROP INDEX ix_ModifiedDate;
GO
O exemplo seguinte acrescenta um índice.
ALTER TABLE Sales.SalesOrderDetail_inmem
ADD INDEX ix_ModifiedDate (ModifiedDate);
GO
O exemplo seguinte adiciona múltiplas colunas, com um índice e restrições.
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