Pobrałem stąd próbkę w pamięci opartą na AdventureWorks i wykonałem wszystkie kroki opisane w dołączonym dokumencie. Jednak gdy próbuję uruchomić skrypt w SQL Server Management Studio, pojawia się komunikat o błędzie:
Instrukcja ALTER DATABASE jest niedozwolona w przypadku transakcji z wieloma wyciągami
Błąd wskazuje na linię 9, która jest:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Ponieważ jest to (mniej więcej) oficjalna dokumentacja Microsoft, zakładam, że robię coś źle, ale nie mogę zrozumieć, co to jest.
źródło
Zgadzam się z @AaronBertrand, że nie robisz nic złego. To nie byłby pierwszy raz, gdy widziałem skrypt Microsoft z błędem. Realistycznie przy tylu publikowanych skryptach zdziwiłbym się, że ich nie widziałem.
W szczególności problem polega na tym, że w
ALTER DATABASE
ogóle nie jest dozwolony w transakcji. Odwołanie do BOL można zobaczyć tutaj: Transact-SQL Instrukcje dozwolone w transakcjachW rzeczywistości nawet tak prosty skrypt, jak ten, zawiedzie z tym samym błędem.
Jak powiedział Aaron, usuń obsługę transakcji (lub przynajmniej
ALTER DATABASE
wyciąg z transakcji) i powinieneś być w porządku.źródło
Użyj „Idź”, aby rozdzielić transakcje. To rozwiąże problem. (Jest to łatwe niż uruchamianie jeden po drugim.) Można również zmienić poziom izolacji (nie testowano)
źródło
ALTER DATABASE
nie można go wykonać w ramach transakcji. Ustawienie poziomu izolacji naSERIALIZABLE
nie ma na to wpływu.