2010-05-09 8 views
18

Estoy interesado en devolver un conjunto de resultados vacío de los procedimientos almacenados de SQL Server en ciertos eventos.¿Cómo devuelvo un conjunto de resultados vacío de un procedimiento usando T-SQL?

El comportamiento previsto es que un L2SQL DataContext.SPName().SingleOrDefault() dará como resultado un valor nulo de CLR.

estoy actualmente usando la siguiente solución, pero estoy seguro de si se considera una mala práctica, un peligro para el rendimiento (no pude encontrar uno al leer el plan de ejecución), o si no es más que una mejor manera:

SELECT * FROM [dbo].[TableName] 
WHERE 0 = 1; 

El plan de ejecución es un escaneo constante con un costo trivial asociado.

La razón por la que estoy pidiendo esto en lugar de simplemente no ejecutar ningún SELECT es porque me preocupa que las sentencias SELECT @scalar o SELECT INTO anteriores pudieran causar que los conjuntos de resultados involuntarios se sirvan nuevamente en L2SQL. ¿Me estoy preocupando por nada?

+1

Me parece bien, pero asegúrese de dejar un comentario que lo explique :) –

Respuesta

10

Si desea simplemente recuperar los metadatos de un conjunto de resultados sin ninguna fila real, use SET FMTONLY ON.

22

Ese es un enfoque razonable. Otra alternativa es:

SELECT TOP 0 * FROM [dbo].[TableName] 
+0

¡Ah, nunca pensé en eso! – pauloya

+1

Hazlo más corto con SELECT TOP 0 0 (el segundo nulo es lo que se devolvería, pero como lo haces en la parte superior 0, no hace nada y no es necesario acceder a una tabla. – KimvdLinde

2

Es un enfoque completamente razonable.

Para aliviar cualquier preocupación sobre el rendimiento (whoch no debería tener ninguno en primer lugar - el servidor es lo suficientemente inteligente como para evitar el escaneo de tabla para 1 = 0), elija una tabla que es muy pequeña y poco utilizada - I ' Estoy seguro de que su esquema de base de datos tiene uno.

26

Si necesita los nombres de las columnas en la respuesta, proceda con el select TOP 0 de esa tabla; de lo contrario, simplemente use SELECT TOP 0 NULL. Debería funcionar bastante rápido :)

0

Creo que la mejor solución es la parte superior 0 pero no utiliza una tabla ficticia. Esto lo hace por mí

seleccionar top 0 nulo como column1, nulo como column2.

Usando p. Ej. una tabla del sistema puede estar bien para el rendimiento, pero se ve sucia.

Cuestiones relacionadas