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é?
Cela semble fonctionner:
RAISERROR('My Error Message',0,1)
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;
--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")