2009-09-01 11 views
8

¿Alguien sabe cómo configurar el tiempo de espera en un procedimiento almacenado? Encontré algunos ejemplos en el NET, por ejemplo sp_configure 'Query Timeout' remoto, 5, pero esto no funcionó. También encontré algunos comandos "DBPROP_COMMANDTIMEOUT" y "DBPROP_GENERALTIMEOUT", pero no sé si son los adecuados para usar y, en caso afirmativo, cómo usarlos en mi código Transact-SQL.Configuración del tiempo de espera de consulta en un procedimiento almacenado en SQL Server 2005

Respuesta

3

Nunca he oído hablar de establecer un tiempo de espera para ejecutar un procedimiento almacenado en el lado del servidor. Por lo general, debe especificar el tiempo de espera para el comando que ejecuta el procedimiento en el proveedor de datos que está utilizando, como ADO.NET.

+0

Sí, es un tiempo de espera del cliente – gbn

1

Este article tiene una muy buena explicación sobre los tiempos de espera de consultas y cómo son solo un concepto del lado del cliente. Puede establecer el tiempo de espera de la consulta en el estudio de administración de SQL Server desde el menú Herramientas | Opciones.

0

Tiene que establecer el tiempo de espera cuando ejecuta el procedimiento almacenado en el cliente. En lo que respecta al servidor SQL, permitirá que el procedimiento almacenado se ejecute para siempre a menos que se le indique que lo cancele.

5

Como dijo Chris Tybur, no se puede esperar el tiempo de espera de la consulta para un proceso almacenado en el proceso almacenado o en el servidor SQL.

CommandTimeout es un concepto de cliente: el cliente abortará la consulta después de un cierto período de tiempo. No hay un temporizador o mecanismo de un hombre muerto para que un proceso almacenado se aborte a sí mismo/o cualquier consulta). El servidor SQL permitirá que una consulta se ejecute para siempre.

El "Remote Query Timeout" es exactamente eso: tiempo de espera cuando SQL Server realiza una llamada remota, cuando SQL Server es el cliente de otro servidor. Se dice en la descripción:

Este valor se aplica a un conexión saliente iniciada por el motor de base de como una consulta a distancia. Este valor no tiene ningún efecto en las consultas recibidas por Motor de base de datos.

Una pregunta reciente con buena información: - "¿Qué está sucediendo que desea evitar" timeout setting for SQL Server

3

Espere la verdadera pregunta es, Todos se han centrado en el lado del servidor, del lado del cliente, pero en realidad no sabemos por qué hace esta pregunta (y es importante).

Y otro "por qué": ¿por qué quiere establecer un tiempo de espera en un "procedimiento almacenado"? ¿Por qué no una vista, una función o una consulta? ¿Usó el término "procedimiento almacenado" por una razón en particular o simplemente estaría interesado en aprender cómo establecer un tiempo de espera en T-SQL?

Te lo pregunto porque me pregunto si tienes problemas de bloqueo y quizás SET LOCK_TIMEOUT 1000 o WITH (NOLOCK) sean lo que realmente necesitas. Sin más información, aunque no puedo decirlo. Si puede darnos más comentarios sobre por qué está preguntando, qué está sucediendo y qué es lo que finalmente quiere que suceda si se alcanza su "tiempo de espera", tal vez podamos ayudarlo más.

Conclusión: Sí, puede establecer un tiempo de espera en T-SQL y sí puede detener la ejecución de un procedimiento almacenado con T-SQL. Pero no sé lo suficiente sobre lo que quiere ofrecer consejos sobre dónde buscar o para darle más información. Estoy un poco asustado de que ya haya dicho demasiado :)

Cuestiones relacionadas