2012-02-23 11 views
9

Soy nuevo en SQL Server y creé mi primer procedimiento almacenado. Se ejecuta bien y me puede localizar en los términos de 'Programación', 'Procedimientos almacenados' por lo que el pop abrir una nueva consulta y el tipo en las siguientes declaraciones:No se pudo encontrar el procedimiento almacenado; sin embargo, puede ejecutarlo

use name_of_database 
exec name_of_stored_procedure 'value' 

Sin embargo antes de ejecutar el procedimiento almacenado, el nombre de la almacenada procedimiento está subrayado en rojo señalando que no se puede encontrar, así que ejecute la consulta:

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure' 

Nada. No devuelve nada.

Sin embargo, si continúo y ejecuto el procedimiento almacenado, funciona bien.

¿Qué estoy haciendo mal?

+0

Si la consulta 'INFORMATION_SCHEMA' no arrojó nada, entonces no creo que el problema haya sido la caché IntelliSense (o al menos no su único problema). Parece que no estuviste en el contexto de la base de datos correcta. –

Respuesta

23

Para SSMS, solo tiene que borrar la memoria caché Intellisense (Ctrl + Shift + R). Entonces la línea ondulada roja desaparecerá e Intellisense te ayudará con eso.

Si puede ver su Stored Proc en Programación -> Procedimientos almacenados en su explorador de objetos, entonces podrá verlo a través de su consulta select * from information_schema.routines .... Verifique el contexto de su base de datos, así como el resto de la consulta. Elimine la cláusula where y mire todo el conjunto de resultados.

+0

Impresionante. Eso funcionó como un encanto. ¿Con qué frecuencia SQL Server Management Studio borra su caché sin que yo tenga que ingresar (CTRL + Shift + R)? – PeanutsMonkey

+0

@ PeanutsMonkey Buena pregunta. No sé la respuesta a eso. No hay opción para configurarlo en SSMS (que yo sepa). Se convertirá en un hábito simplemente presionar las teclas necesarias. No me molesta personalmente –

+0

Gracias amigo. Estaba sentado aquí pensando qué demonios estoy haciendo mal. – PeanutsMonkey

0

Mi conjetura es que sólo podría ejecutar la consulta de segundo contra una base de datos diferente, probablemente el maestro, trate de:

use 'name_of_database' 
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure' 

y entonces usted debería ser capaz de verlo

+0

Sin embargo, sospeché eso y ejecuté el mismo comando que sugirió sin embargo, no devuelve nada. – PeanutsMonkey

+0

Eso es interesante, ¿sería un error del nombre en la cláusula where? –

+0

No. Como indicó Shark, todo lo que tenía que hacer era borrar el caché. – PeanutsMonkey

2

¿Es posible que su procedimiento está en un esquema distinto de dbo? Siempre debe especificar el esquema al crear y referenciar objetos. Hay varias razones as described here. Esencialmente, cuando no especifica el esquema, puede tener todo tipo de comportamiento confuso dependiendo del esquema predeterminado del usuario que está creando o llamando al procedimiento.

Al verificar la existencia de objetos, también debe tener en cuenta el esquema.

También debe verificar los procedimientos en sys.procedures. Algunos antecedentes sobre coding consistently here, ya que no siempre se puede obtener la información que está buscando desde INFORMATION_SCHEMA.

2

que tenían el mismo problema y lo arreglaron por el simple uso de corchetes

EXEC [dbo].[procedureName] 

espero que ayude a alguien más tarde :)

+1

Esta fue la única solución que funcionó para mí. Cerré y abrí Management Studio, pero no funcionó hasta que agregué los corchetes. – sch4v4

1

En mi caso he resuelto el problema de esta manera sencilla:

  1. Cada vez que creo el procedimiento, solo ejecuto el procedimiento en MSSQL Server Studio una vez. Así que obtuve el procedimiento creado con el esquema en el db_name=>Programmibility=>Stored Procedure.
  2. Finalmente lo llamé desde mi código C#. Y se resolvió!
Cuestiones relacionadas