2011-03-18 21 views
8

He importado mi base de datos del servidor sql 2005 en un proyecto de base de datos VS2010. Una de mis procedimientos almacenados contiene una declaración similar aProyecto de base de datos de Visual Studio - Referencia sin resolver a la tabla temporal

INSERT INTO #myTemp ...

y Visual Studio me da una advertencia, tales como

SQL04151: Procedimiento: [dbo ]. [mySproc] tiene una referencia no resuelta al objeto [#myTemp].

¿Hay alguna manera de resolver esta referencia? Me gustaría borrar la mayor cantidad posible de advertencias del proyecto.

+0

¿Se ha creado la tabla temporal en el procedimiento almacenado? – Thomas

+0

No, en este caso, la tabla temporal es creada por un proceso "primario" almacenado que luego llama a esto varias veces en un bucle :( – Nick

Respuesta

0

Si sabe que no hay ningún problema con su código, puede suprimir las advertencias de compilación. Ve a la configuración de tu proyecto y encontrarás una pestaña llamada Build. Hay un campo allí para agregar los códigos que desea suprimir. Busqué en Google y encontré this page, describiendo los pasos.

+4

No creo que suprimir todos los errores SQL04151 sea una idea tan genial. Deshazte de los mensajes de la tabla temporal, pero también suprimirás cualquier otra advertencia de referencia db ... – GordonB

+0

Luego usa: '#pragma warning disable 4151 /* SOME CODE */ #pragma warning restore 4151' Be asegúrese de agregar comentarios sobre por qué está deshabilitando la advertencia. – slimburrok

+3

#pragma no funciona en archivos .sql. –

0

Obviamente, VS no sabe que este proceso almacenado solo debe ejecutarse desde otro proceso almacenado que crea esta tabla temporal. Una solución sería añadir código al procedimiento que crea la tabla temporal si es necesario

If object_id('tempdb..#MyTemp') Is Null 
    Create Table #MyTemp 
     (
     ... 
     ) 

Si siempre se llama de los padres, en teoría, el código anterior no debe funcionar nunca.

8

Tenía lo mismo, donde el padre lo crea. En lugar de deshacerme de la advertencia creando la tabla si no existe, quiero poder lanzar una excepción si no es así. Poner una declaración CREATE después de la declaración de devolución garantiza que nunca se ejecutará, pero también borra la advertencia.

IF (OBJECT_ID('tempdb..#Foo') is null) 
BEGIN 
    Raiserror('#Foo doesn''t exist.', 16, 1) 
    RETURN 
    CREATE TABLE #Foo (foo int) --Here just to get rid of compile warning 
END 
Cuestiones relacionadas