J'ai téléchargé l'exemple en mémoire basé sur AdventureWorks à partir d' ici et j'ai suivi toutes les étapes décrites dans le document d'accompagnement. Cependant, lorsque j'essaie d'exécuter le script dans SQL Server Management Studio, j'obtiens le message d'erreur:
Instruction ALTER DATABASE non autorisée dans une transaction à instructions multiples
L'erreur pointe vers la ligne 9, qui est:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Comme il s'agit (plus ou moins) de documentation officielle de Microsoft, je suppose que c'est quelque chose que je fais mal, mais je ne peux pas comprendre ce que c'est.
la source
Je suis d'accord avec @AaronBertrand que vous ne faites rien de mal. Ce ne serait pas la première fois que je verrais un script Microsoft contenant un bogue. De façon réaliste avec autant de scripts qu'ils publient, je serais surpris de n'en voir aucun.
Plus précisément, le problème est que ce
ALTER DATABASE
n'est pas autorisé du tout dans une transaction. Vous pouvez voir la référence BOL ici: Instructions Transact-SQL autorisées dans les transactionsEn fait, même un script aussi simple que celui-ci échoue avec la même erreur.
Comme l'a dit Aaron, supprimez la gestion des transactions (ou du moins la
ALTER DATABASE
déclaration de la transaction) et ça devrait aller.la source
Utilisez "Aller" pour séparer les transactions. Cela résoudra le problème. (C'est facile à exécuter un par un.) Peut également modifier le niveau d'isolement (non testé)
la source
ALTER DATABASE
cela ne peut pas être effectué dans une transaction. La définition du niveau d'isolementSERIALIZABLE
n'a aucun effet sur cela.