2015-09-17 16 views
5

Ho controllato molti thread ora e non riesco a trovare una risposta per questo, e ho bisogno di essere abbastanza certo/sicuro di aver ragione nell'assumerlo prima di rispondere a un cliente.SQL Server Convalida un proc memorizzato prima di eseguirlo?

quindi, come afferma l'intestazione, SQL Server convalida una stored procedure prima di eseguirla?

IE: Anche se ho un IF statement che non potrà mai soddisfare una certa condizione, sarà il codice che IF statement condition essere controllato e validato prima di eseguire?

EDIT: Ecco un rapido esempio:

DECLARE @ParamSource VARCHAR(2) = 'V3' 

IF @ParamSource = 'V1' 
BEGIN 
    --USE LINKED SERVER HERE WHICH THROWS AN ERROR ABOUT CONNECTIONS 
END 

IF @ParamSource = 'V3' 
BEGIN 
    --DO MY ACTUAL CODE 
END 

potrò mai rispondere a tale prima condizione, ma per qualche ragione, il mio proc memorizzato sta cercando di convalidare il tempo di esecuzione e mantiene erroring.

+0

Sono convalidati (almeno in parte) quando vengono inizialmente creati, ma non in fase di runtime. Questo tuttavia non è vero per SQL dinamico che non viene mai convalidato. Questo deriva dall'esperienza personale, non da alcuna documentazione. Se si desidera verificare questa teoria, è possibile creare una semplice stored procedure su una tabella di test, quindi rimuovere una colonna dalla tabella di test. La stored procedure tenterà comunque di eseguire, ma genererà un errore. – user2366842

+0

@ user2366842- grazie per la risposta ... La ragione per cui penso che convalida o faccia qualcosa in questo senso è perché sono in procinto di creare un 'Ambiente di Disaster Recovery 'e una delle' istruzioni IF' usa un collegamento server a cui non posso connettermi per qualche motivo (ma non ho mai avuto bisogno di soddisfare questa condizione, posso cancellare questo codice, ma volevo solo sapere se questo è ciò che SQL stava facendo?) – Mike

+2

Nome rinviato Risoluzione e compilazione: https: //technet.microsoft.com/en-us/library/ms190686(v=sql.105).aspx (collegamento aggiornato) – Pred

risposta

1

Quando viene creata una stored procedure, viene compilata, il che significa che ogni oggetto utilizzato in una stored procedure viene convalidato. Per tutti gli oggetti esistenti è necessario anche averne accesso. Ciò creerà un piano di esecuzione per questa procedura memorizzata e finché la procedura non cambia, il piano di esecuzione dovrebbe rimanere valido. Se non esiste alcun oggetto tabella utilizzato nella stored procedure (solo tabella, non server collegati), il piano di esecuzione non verrà creato a questo punto, ma la procedura verrà creata se non vengono rilevati altri errori.

Nell'esempio, è necessario accedere all'oggetto server collegato per creare la stored procedure. Dopo la creazione, se non si ha più accesso al server collegato, la procedura verrà comunque eseguita, ma genererà un errore se è necessario accedere al server collegato IF @ParamSource = 'V1'. Tuttavia, se non colpisce il server collegato IF @ParamSource = 'V3', non ci saranno errori.

In sostanza, significa che l'utente che crea la procedura deve avere accesso al server collegato.

+0

Ulteriori informazioni sulla ricompilazione delle stored procedure: [collegamento] (https://technet.microsoft.com/en-us/library/ms190439 (v = sql.105) .aspx) – Philippe