Categories
.NET

FillSchema y tablas temporales.

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