Ich habe das AdventureWorks-basierte In-Memory-Beispiel von hier heruntergeladen und alle im zugehörigen Dokument beschriebenen Schritte ausgeführt. Wenn ich jedoch versuche, das Skript in SQL Server Management Studio auszuführen, wird folgende Fehlermeldung angezeigt:
ALTER DATABASE-Anweisung innerhalb einer Transaktion mit mehreren Anweisungen nicht zulässig
Der Fehler zeigt auf Zeile 9:
IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod]
CONTAINS MEMORY_OPTIMIZED_DATA
GO
Da dies (mehr oder weniger) eine offizielle Microsoft-Dokumentation ist, gehe ich davon aus, dass ich etwas falsch mache, aber ich kann nicht herausfinden, was es ist.
quelle
Ich bin mit @AaronBertrand einverstanden, dass Sie nichts falsch machen. Dies wäre nicht das erste Mal, dass ich ein Microsoft-Skript mit einem Fehler darin sehe. Bei so vielen Skripten, wie sie veröffentlichen, wäre ich realistisch überrascht, keine zu sehen.
Insbesondere besteht das Problem darin, dass
ALTER DATABASE
eine Transaktion überhaupt nicht zulässig ist. Die BOL-Referenz finden Sie hier: In Transaktionen zulässige Transact-SQL-AnweisungenSelbst ein so einfaches Skript schlägt mit demselben Fehler fehl.
Wie Aaron sagte, entfernen Sie die Transaktionsbehandlung (oder zumindest die
ALTER DATABASE
Anweisung aus der Transaktion) und Sie sollten in Ordnung sein.quelle
Verwenden Sie "Los", um die Transaktionen zu trennen. Das wird das Problem lösen. (Es ist einfach, als eins nach dem anderen auszuführen.) Kann auch die Isolationsstufe ändern (nicht getestet)
quelle
ALTER DATABASE
dies innerhalb einer Transaktion nicht möglich ist. Das Einstellen der Isolationsstufe aufSERIALIZABLE
hat darauf keinen Einfluss.