web-dev-qa-db-fra.com

Raiserror dans SQL Server

Dans les versions précédentes, nous posions des erreurs dans t-sql comme:

RAISERROR 50000 'My Error Message'

Dans la dernière version de SQL Server, cette syntaxe a été abandonnée et remplacée par la syntaxe RaiseError ().

J'aimerais avoir une méthode générique pour générer des erreurs, et le mieux que je puisse trouver jusqu'ici est:

sp_addmessage @msgnum = 50001,
              @severity = 10,
              @msgtext = N'My Error Message', @replace = 'REPLACE';
RAISERROR (50001, 10, 1, 'This error message is not displayed')

Mais je ne peux pas créer de message d'erreur avec sp_addmessage pour chaque message, car il existe des milliers.

Quel est le meilleur moyen d'élever des messages avec un message personnalisé?

13
Cameron Castillo

Cela semble fonctionner:

RAISERROR('My Error Message',0,1)
19
Cameron Castillo

En fait, RAISERROR est déconseillé en faveur de THROW depuis SQL Server 2012. Allez à ici pour plus d'informations. L’un des aspects les plus amusants est qu’il s’agit de Rais error et non de Rais eE / rror qui l’appelle "levée" dans certains cercles.

Échantillon de BOL:

USE tempdb;
GO
CREATE TABLE dbo.TestRethrow
(    ID INT PRIMARY KEY
);
BEGIN TRY
    INSERT dbo.TestRethrow(ID) VALUES(1);
--  Force error 2627, Violation of PRIMARY KEY constraint to be raised.
    INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH

    PRINT 'In catch block.';
    THROW;
END CATCH;
18
MarkD

--Utilisez le caractère générique s% pour pouvoir transmettre tout message de votre choix stocké:
if Not Exists (Select * from SysMessages where error = 62000) EXEC sp_addmessage @msgnum = 62000, @severity = 16, @msgtext = N'%s', @lang = 'us_english'

--Alors dans votre sp vous pouvez soulever cette erreur:
RAISERROR (62000,16,1, "Le texte de l'erreur et/ou de l'erreur commerciale va ici")

0
mark