He descargado el ejemplo en memoria basado en AdventureWorks de aquí , y seguí todos los pasos descritos en el documento adjunto. Sin embargo, cuando intento ejecutar el script en SQL Server Management Studio, aparece el mensaje de error:
La instrucción ALTER DATABASE no está permitida dentro de la transacción de varios estados
El error apunta a la línea 9, que es:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Dado que esta es (más o menos) documentación oficial de Microsoft, supongo que es algo que estoy haciendo mal, pero no puedo entender qué es.
fuente
Estoy de acuerdo con @AaronBertrand, no estás haciendo nada malo. Esta no sería la primera vez que veo un script de Microsoft con un error. Siendo realistas con tantos scripts como publican, me sorprendería no ver ninguno.
Específicamente, el problema es que
ALTER DATABASE
no está permitido en ninguna transacción. Puede ver la referencia de BOL aquí: Declaraciones de Transact-SQL permitidas en transaccionesDe hecho, incluso un script tan simple como este falla con el mismo error.
Como dijo Aaron, elimine el manejo de la transacción (o al menos la
ALTER DATABASE
declaración de la transacción) y debería estar bien.fuente
Use "Ir" para separar las transacciones. Eso resolverá el problema. (Es fácil de ejecutar uno por uno). También puede cambiar el nivel de aislamiento (no probado)
fuente
ALTER DATABASE
no se puede realizar dentro de una transacción. Establecer el nivel de aislamiento enSERIALIZABLE
no tiene ningún efecto sobre esto.