Domanda

Abbiamo 2 database, diciamo DB1 e DB2.
DB1 contiene tutte le procedure memorizzate che accedono anche ai dati in DB2.
DB1 utilizza i sinonimi per accedere alle tabelle in DB2.
(L'uso dei sinonimi è un requisito nella nostra situazione)

Funziona perfettamente in tutte le situazioni con SQL Server 2005 Developer Edition.

Tuttavia, nella Express Edition, riceviamo un'eccezione quando eseguiamo le seguenti operazioni:
1 Riavvia SQL Server
2 Eseguire il codice seguente in DB1:

  

imposta lo snapshot a livello di isolamento delle transazioni
  iniziare la transazione
  dichiarare @sQuery varchar (max)
  set @sQuery = 'Seleziona * da synToSomeTableInDB2'
  exec (@sQuery)
  commit transazione

Ciò comporterà il seguente errore:

  

Transazione di isolamento dello snapshot non riuscita nel database '...' perché il database non è stato ripristinato all'avvio della transazione corrente. Riprovare la transazione dopo il ripristino del database.

La stessa query di selezione viene eseguita correttamente se utilizzata senza EXEC o se eseguita su Developer Edition.
Il riavvio del server nel passaggio 1 è importante poiché una volta stabilita una connessione a DB2, il codice funziona anche su SQL Server Express Edition.

Qualcuno ha un'idea di cosa si tratta? Dobbiamo essere in grado di utilizzare EXEC per alcune query dinamiche. Abbiamo già controllato MSDN, cercato Google, ... Qualsiasi aiuto è molto apprezzato.

--- Modifica: 10 marzo 09
Come discusso di seguito con Ed Harper, ho presentato una segnalazione di bug per questo.
Vedi https://connect.microsoft.com/SQLServer/feedback/ViewFeedback aspx? FeedbackID = 422150

È stato utile?

Soluzione

Come scoperto tramite Microsoft Connect , il problema è che per impostazione predefinita su SQL Server Express Edition l'opzione AUTO_CLOSE è impostata su true .
La modifica di questa opzione su false risolve il problema.

Altri suggerimenti

Il messaggio di errore suggerisce che la query ha esito negativo poiché SQL Server sta ancora ripristinando il database dopo il riavvio del servizio quando si esegue la query.

L'errore si verifica sempre al primo tentativo di eseguire questo codice, indipendentemente dal tempo trascorso dal riavvio del servizio?

È possibile confermare dal registro di SQL Server che il database si sta ripristinando correttamente dopo il riavvio?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top