Pregunta

Tenemos 2 bases de datos, por ejemplo, DB1 y DB2.
DB1 contiene todos los procedimientos almacenados que acceden también a los datos en DB2.
DB1 utiliza sinónimos para acceder a las tablas en DB2.
(El uso de sinónimos es un requisito en nuestra situación)

Esto funciona perfectamente bien en todas las situaciones con SQL Server 2005 Developer Edition.

Sin embargo, en la Edición Express, obtenemos una excepción cuando hacemos lo siguiente:
1 Reiniciar SQL Server
2 Ejecute el siguiente código dentro de DB1:

  

establecer instantánea de nivel de aislamiento de transacción
  comenzar transacción
  declare @sQuery varchar (max)
  set @sQuery = 'Seleccionar * de synToSomeTableInDB2'
  ejecutivo (@sQuery)
  confirmar transacción

Esto producirá el siguiente error:

  

La transacción de aislamiento de instantánea falló en la base de datos '...' porque la base de datos no se recuperó cuando se inició la transacción actual. Vuelva a intentar la transacción después de que la base de datos se haya recuperado.

La misma consulta de selección pasa bien cuando se usa sin EXEC o cuando se ejecuta en Developer Edition.
Reiniciar el servidor en el paso 1 es importante ya que una vez que se hizo una conexión a DB2, el código también funciona bien en SQL Server Express Edition.

¿Alguien tiene una idea de qué es esto? Necesitamos poder utilizar EXEC para algunas consultas dinámicas. Ya hemos verificado MSDN, buscado en Google, ... Cualquier ayuda es muy apreciada.

--- Editar: 10 de marzo de 09
Como se discutió con Ed Harper a continuación, presenté un informe de error para esto.
Consulte https://connect.microsoft.com/SQLServer/feedback/ViewFeedback .aspx? FeedbackID = 422150

¿Fue útil?

Solución

Como se descubrió a través de Microsoft Connect , el problema es que, de forma predeterminada en SQL Server Express Edition, la opción AUTO_CLOSE se establece en true .
Cambiar esta opción a falso soluciona el problema.

Otros consejos

El mensaje de error sugiere que la consulta falla porque el servidor SQL todavía está recuperando la base de datos después del reinicio del servicio cuando ejecuta su consulta.

¿El error siempre ocurre en el primer intento de ejecutar este código, independientemente del tiempo transcurrido desde que se reinició el servicio?

¿Puede confirmar desde el registro de SQL Server que la base de datos se está recuperando correctamente después del reinicio?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top