Frage

Wir haben 2 Datenbanken, sagen DB1 und DB2.
DB1 enthält alle gespeicherten Prozeduren, die auch Daten in DB2 zuzugreifen.
DB1 verwendet Synonyme die Tabellen in DB2 zuzugreifen.
(Synonyme zu verwenden ist eine Anforderung in unserer Situation)

Das funktioniert völlig in Ordnung in allen Situationen mit SQL Server 2005 Developer Edition.

Doch in der Express Edition, erhalten wir eine Ausnahme, wenn wir wie folgt vor:
1 Starten Sie SQL Server
2 Führen Sie den folgenden Code im DB1:

  

set Transaktionsisolationsstufe snapshot
  beginnen Transaktion
  deklarieren @sQuery varchar (max)
  set @sQuery = 'Select * from synToSomeTableInDB2'
  exec (@sQuery)
  Commit-Transaktion

Das in dem folgenden Fehler führen:

  

Snapshot Isolation Transaktion fehlgeschlagen in Datenbank ‚...‘, weil die Datenbank nicht wiederhergestellt wurde, wenn die aktuelle Transaktion gestartet wurde. Wiederholen Sie die Transaktion, nachdem die Datenbank wiederhergestellt hat.

Die gleiche SELECT-Abfrage geht in Ordnung, wenn ohne die EXEC oder bei der Ausführung auf der Developer Edition verwendet.
Neustart des Servers in Schritt 1 ist wichtig, da, sobald eine Verbindung zu DB2 gemacht wurde, wird der Code auch in Ordnung auf SQL Server Express Edition.

Hat jemand eine Idee, was das ist? Wir müssen in der Lage EXEC für einige dynamische Abfragen zu verwenden. Wir haben überprüft bereits MSDN, gesucht Google, ... Jede Hilfe wird sehr geschätzt.

--- Edit: 10. März 09
Wie weiter unten mit Ed Harper diskutiert, ich habe einen Bug-Report für diese eingereicht wurde.
Siehe https://connect.microsoft.com/SQLServer/feedback/ViewFeedback aspx? FeedbackID = 422.150

War es hilfreich?

Lösung

Wie über herausgefunden Microsoft Connect , das Problem ist, dass standardmäßig auf SQL Server Express Edition des AUTO_CLOSE Option wird auf true .
Eine Änderung dieser Option false behebt das Problem.

Andere Tipps

Die Fehlermeldung deutet darauf hin, dass die Abfrage schlägt fehl, da SQL Server noch die Datenbank nach dem Wiederanlauf Wiederherstellung, wenn Sie Ihre Abfrage ausführen.

Ist der Fehler immer beim ersten Versuch auftritt diesen Code auszuführen, unabhängig von der Zeit, die seit dem Dienst neu gestartet wurde?

Können Sie aus dem SQL Server-Protokoll bestätigen, dass die Datenbank korrekt nach dem Neustart erholt?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top