Hoy, mientras hacía pruebas en una aplicación desarrollada en C#, una rutina que se encargaba de obtener el esquema de procedimientos almacenados (Sql Server), mandaba errores -con el mensaje "Invalid object name '#temp...'"- por el hecho de que algunos de éstos hacían uso de tablas temporales.
El código en cuestión hacía algo como esto:
csharp:
DataTable tabla =
new DataTable
();
using (SqlDataAdapter da = new SqlDataAdapter("sp_test", "CadenaConexion"))
{
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.FillSchema(tabla, SchemaType.Source);
}
Y el procedimiento tenía una estructura parecida a:
sql:
CREATE procedure sp_test
AS
SELECT a, b
INT0 #temp
FR0M tabla1
SELECT T.*, T2.c
FR0M #temp T join tabla2 T2
0N T.a = T2.a
go
Después de hacer una búsqueda y encontrar un par de páginas que aclararon mis dudas, finalmente tuve que modificar algunos procedimientos para que hagan uso de variables tipo table.
Nota: La sintáxis del procedimiento tiene errores intencionales debido a los problemas de configuración en el servidor donde se hospeda esta página