Fiz o download do exemplo In-memory baseado em AdventureWorks aqui e segui todas as etapas descritas no documento que o acompanha. No entanto, quando tento executar o script no SQL Server Management Studio, recebo a mensagem de erro:
Instrução ALTER DATABASE não permitida em transações com várias instruções
O erro aponta para a linha 9, que é:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Como essa é (mais ou menos) a documentação oficial da Microsoft, estou assumindo que é algo que estou fazendo de errado, mas não consigo descobrir o que é.
fonte
Concordo com @AaronBertrand que você não está fazendo nada de errado. Esta não seria a primeira vez que eu vi um script da Microsoft com um bug. Realisticamente, com o maior número de scripts publicados, eu ficaria surpreso em não ver nenhum.
Especificamente, o problema é que isso
ALTER DATABASE
não é permitido em nenhuma transação. Você pode ver a referência BOL aqui: Instruções Transact-SQL permitidas em transaçõesDe fato, mesmo um script tão simples quanto esse falha com o mesmo erro.
Como Aaron disse, remova o manuseio da transação (ou pelo menos o
ALTER DATABASE
extrato da transação) e você ficará bem.fonte
Use "Ir" para separar as transações. Isso resolverá o problema. (É fácil do que executar um por um.) Também pode alterar o nível de isolamento (não testado)
fonte
ALTER DATABASE
não podem ser executadas em uma transação. Definir o nível de isolamento paraSERIALIZABLE
não tem efeito nisso.