Отсюда я скачал образец In-memory на основе AdventureWorks и выполнил все шаги, описанные в прилагаемом документе. Однако, когда я пытаюсь запустить сценарий в SQL Server Management Studio, я получаю сообщение об ошибке:
Оператор ALTER DATABASE не разрешен в транзакции с несколькими операторами
Ошибка указывает на строку 9, которая:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Поскольку это (более или менее) официальная документация Microsoft, я предполагаю, что я что-то не так делаю, но я не могу понять, что это такое.
источник
Я согласен с @AaronBertrand, что вы не делаете ничего плохого. Это был бы не первый раз, когда я видел скрипт Microsoft с ошибкой в нем. Реально с таким количеством сценариев, которые они публикуют, я был бы удивлен, не увидев ни одного.
В частности, проблема в том, что
ALTER DATABASE
в транзакции вообще не допускается. Вы можете увидеть ссылку на BOL здесь: заявления Transact-SQL, разрешенные в транзакцияхНа самом деле, даже такой простой скрипт, как этот, завершается с той же ошибкой.
Как сказал Аарон, удалите обработку транзакции (или, по крайней мере,
ALTER DATABASE
оператор из транзакции), и все будет в порядке.источник
Используйте «Go» для разделения транзакций. Это решит проблему. (Это проще, чем запускать по одному.) Также можно изменить уровень изоляции (не проверено)
источник
ALTER DATABASE
не может быть выполнено в транзакции. Установка уровня изоляции наSERIALIZABLE
это никак не влияет.