Désolé, beaucoup de code s'affiche.Obtention de valeur à partir d'une procédure stockée dans une autre procédure stockée
J'ai vu une autre question comme celle-ci qui utilisait des paramètres de sortie. J'utilise l'instruction RETURN pour retourner la valeur que je veux utiliser.
J'ai une InsertMessage de procédure stockée qui ressemble à ceci:
ALTER PROCEDURE dbo.InsertNewMessage ( @messageText text, @dateTime DATETIME, @byEmail bit, @bySMS bit ) AS DECLARE @NewId int BEGIN BEGIN TRANSACTION INSERT INTO MessageSet VALUES (@byEmail, @bySMS, @dateTime, @messageText) SET @NewId = SCOPE_IDENTITY() COMMIT END RETURN @NewId
qui une autre procédure stockée utilise:
ALTER PROCEDURE dbo.InsertMessageFromUserToGroup ( @userEmail nvarchar(256), @groupId int, @messageText text, @bySMS bit, @byEmail bit ) AS --Inserts a new message to a group DECLARE @messageId int DECLARE @dateTime DATETIME = GETDATE() --First check if user is a part of the group IF NOT EXISTS (SELECT userEmail FROM UserToGroupSet WHERE userEmail = @userEmail AND groupId = @groupId) RETURN 'User not part of group' ELSE --User is a part of the group, add message BEGIN BEGIN TRANSACTION SET @messageId = [dbo].[InsertNewMessage](@messageText, @dateTime, @bySMS, @byEmail) INSERT INTO MessageToUser VALUES(@userEmail, @messageId) INSERT INTO MessageToGroup VALUES(@messageId, @groupId) COMMIT END
La ligne qui provoque la peine et dont je ne suis pas sûr comment handle est celui-ci:
SET @messageId = [dbo].[InsertNewMessage](@messageText, @dateTime, @bySMS, @byEmail)
La syntaxe semble correcte car je peux l'enregistrer. Quand je l'exécute, j'obtiens le message d'erreur:
Running [dbo].[InsertMessageFromUserToGroup] (@userEmail = [email protected], @groupId = 5, @messageText = sdfsdf, @bySMS = false, @byEmail = true). Cannot find either column "dbo" or the user-defined function or aggregate "dbo.InsertNewMessage", or the name is ambiguous. Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1. No rows affected. (0 row(s) returned) @RETURN_VALUE = Finished running [dbo].[InsertMessageFromUserToGroup].
Il semble que l'autre procédure stockée est introuvable. J'ai essayé différentes manières d'appeler la procédure mais tout le reste échoue également. Aucune suggestion?
Merci, cela fonctionne maintenant. Lien utile! – Phil