2012-02-23 8 views
9

Sono nuovo in SQL Server e ho creato la mia prima stored procedure. Esegue bene e mi è possibile individuare sotto 'programmabilità', 'stored procedure' così ho pop aprire una nuova query e digitare le seguenti dichiarazioni:Impossibile trovare la stored procedure, tuttavia è possibile eseguirla.

use name_of_database 
exec name_of_stored_procedure 'value' 

Tuttavia prima di eseguire la stored procedure, il nome della stored procedura viene sottolineata in rosso notare che non è possibile trovare, in modo da eseguire la query:

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

Nada. Non restituisce nulla.

Tuttavia, se procedo ed eseguo la procedura memorizzata, funziona correttamente.

Cosa sto sbagliando?

+0

Se la query 'INFORMATION_SCHEMA' non ha restituito nulla, non penso che la cache IntelliSense sia stata il tuo problema (o almeno non il tuo unico problema). Sembra che tu non fossi nel contesto del database giusto. –

risposta

23

Per SSMS è sufficiente cancellare la cache Intellisense (Ctrl + Shift + R). Quindi la linea rossa ondulata scomparirà e Intellisense ti aiuterà in questo.

Se è possibile visualizzare il Processore memorizzato in Programmabilità -> Stored procedure nell'Explorer oggetti, sarà possibile visualizzarlo tramite la query select * from information_schema.routines .... Controlla il contesto del tuo database, così come il resto della query. Elimina la clausola where e osserva l'intero set di risultati.

+0

Fantastico. Ha funzionato come un fascino. Con quale frequenza SQL Server Management Studio svuota la cache senza dover immettere (CTRL + MAIUSC + R)? – PeanutsMonkey

+0

@PeanutsMonkey Buona domanda. Non conosco la risposta a questo. Non esiste alcuna opzione per impostarlo in SSMS (che io sappia). Diventerà un'abitudine per colpire solo i tasti necessari. Non mi disturba personalmente. –

+0

Grazie amico. Ero seduto qui a pensare a cosa diavolo stavo sbagliando. – PeanutsMonkey

0

La mia ipotesi è che si potrebbe anche correre il 2 ° query in un database diverso, probabilmente il maestro, provare:

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

e allora si dovrebbe essere in grado di vederlo

+0

Ho sospettato che comunque e ha eseguito lo stesso comando suggerito, ma non restituisce nulla. – PeanutsMonkey

+0

Questo è interessante, sarebbe un refuso del nome nella clausola where? –

+0

No. Come indicato dallo squalo, tutto ciò che dovevo fare era cancellare la cache. – PeanutsMonkey

2

E 'possibile che la procedura è in uno schema diverso da dbo? È sempre necessario specificare lo schema durante la creazione e il riferimento agli oggetti. Ci sono diversi motivi as described here. In sostanza, quando non si specifica lo schema, è possibile avere tutti i tipi di comportamento confuso a seconda dello schema predefinito dell'utente che sta creando o chiamando la procedura.

Quando si verifica la presenza di oggetti, è necessario tenere conto anche degli schemi.

Inoltre, è necessario verificare le procedure in sys.procedures. Alcune informazioni di base su coding consistently here, poiché non è sempre possibile ottenere le informazioni richieste da INFORMATION_SCHEMA.

2

ho avuto lo stesso problema e ho riparato semplicemente utilizzando parentesi quadre

EXEC [dbo].[procedureName] 

Speranza che aiuta qualcuno in seguito :)

+1

Questa è stata l'unica soluzione che ha funzionato per me. Ho chiuso e aperto Management Studio ma non ha funzionato fino a quando non ho aggiunto le parentesi quadre. – sch4v4

1

Nel mio caso ho risolto il problema in questo modo SEMPLICEMENTE:

  1. Ogni volta che ho creato la procedura, eseguo solo una volta la procedura su MSSQL Server Studio. Quindi ho ottenuto la procedura creata con lo schema nel db_name=>Programmibility=>Stored Procedure.
  2. Infine l'ho chiamato dal mio codice C#. E ho risolto !!!
Problemi correlati