2014-06-10 6 views
5

Sto cercando di eseguire il codice seguente:LANCIO vs. RAISERROR

THROW 51051, 'I come from the THROW construct :)', 1 ; 

L'errore che sto ottenendo è:

Could not find stored procedure 'THROW'. 

Non è la procedura di lanciare una procedura di sytem? Perché non lo trova?

Inoltre, qual è la differenza tra unsing THROW e ErrorState? Uno è più vecchio/più recente/migliore dell'altro? E cosa significano "ErrorSeverity" e "ErrorState" per ErrorState? Posso definirli come voglio o sono predefiniti?

+1

Quale versione stai utilizzando? Hai taggato sia nel 2008 che nel 2012. – Rahul

+0

@Rahul: Stiamo utilizzando 2008 R2 – Adam

+2

Ecco perché stai ricevendo quell'errore causa che 'THROW' è disponibile da SQL2012 in poi. – Rahul

risposta

5

Sì, lo è, ma only since 2012. Se stai usando 2008R2, allora non esisteva.

Le definizioni di stato e la gravità sono chiaramente documentate nella documentazione raiserror

5

Leggi la seguente: Differences Between RAISERROR and THROW in Sql Server


Sia RAISERROR e LANCIO dichiarazioni sono utilizzati per generare un errore in Server Sql. Il viaggio di RAISERROR partito da SQL Server 7.0, dove, come il viaggio di LANCIO dichiarazione è appena iniziato con SQL Server 2012. ovviamente, Microsoft ci suggerisce di iniziare a utilizzare l'istruzione THROW anziché RAISERROR. THROW La dichiarazione sembra essere semplice e facile da usare rispetto a RAISERROR.

+0

Infatti, 'RAISERROR non può essere utilizzato nelle stored procedure compilate in modo nativo di Sql Server 2014. Quindi sembrava che tutto si stesse muovendo nella direzione di usare più 'LANCIO' – RBT