2014-06-10 11 views
5

próbuję wykonać następujący kod:THROW vs. RAISERROR

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

Błąd otrzymuję to:

Could not find stored procedure 'THROW'. 

Czy procedura nie rzucać procedura sytem? Dlaczego nie może tego znaleźć?

Furthhermore, jaka jest różnica między niezrozumiałymi komunikatami błędu i błędem? Czy jest starszy/nowszy/lepszy od drugiego? Co oznaczają "ErrorSeverity" i "ErrorState" przez ErrorState? Czy mogę je zdefiniować tak, jak chcę lub czy są one wstępnie zdefiniowane?

+1

Z której wersji korzystasz? Oznaczono zarówno rok 2008, jak i rok 2012. – Rahul

+0

@Rahul: Używamy 2008 R2 – Adam

+2

Właśnie dlatego otrzymujesz ten błąd, ponieważ 'WYSZUKAJ 'jest dostępny od SQL2012. – Rahul

Odpowiedz

5

przeczytać: Differences Between RAISERROR and THROW in Sql Server


Zarówno RAISERROR i THROW wypowiedzi służą do podniesienia błąd w Serwer Sql. Podróż RAISERROR rozpoczął od SQL Server 7.0, gdzie jako podróż z THROW oświadczenia właśnie rozpoczął się SQL Server 2012. oczywiście Microsoft sugeruje nam, abyśmy zaczęli używać instrukcji ThROW zamiast RAISERROR. Oświadczenie THROW wydaje się być proste i łatwe w użyciu niż RAISERROR.

+0

W rzeczywistości - 'RAISERROR nie może być używany w Nately compiled Stored Procedures Sql Server 2014's. Wyglądało więc na to, że wszystko zmierza w kierunku użycia "RZUĆ" – RBT