2016-09-15 2 views
0

複数のテーブルを更新する1つのストアドプロシージャに複数のupdateステートメントを含めることは可能ですか?2番目の更新でパラメータに問題があるようですが、コードは次のとおりです。1つのストアドプロシージャ内の複数のUpdateステートメント

ALTER PROCEDURE [dbo].[spUpdateUserProfile] 
@userID int, 
@UserName varchar(50), 
@FirstName varchar(50), 
@MiddleName varchar(50), 
@LastName varchar(50), 
@email varchar(50), 
@answer varchar(50), 
@QuestionID int 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE dbo.USERS 
     SET userName = @userID, 
     FIRSTNAME = @FirstName, 
     MIDDLENAME = @MiddleName, 
     SURNAME = @LastName, 
     EMAILADDRESS = @email 
     WHERE USERID = @userID; 

    UPDATE dbo.USERPASSWORDS 
    SET Answer = @answer, 
    QuestionID = @QuestionID 
    WHERE USERID = @userID; 
END 
+0

短い答えはYES ** **、ストアドプロシージャで複数の更新およびクエリを持つことができます。今、あなたの2番目の更新がうまくいかない理由は明らかではありません。何がうまくいきませんか?間違った行を更新するか、行を更新しませんか?おそらく不正確な値を持つ?それとも、外部キー制約エラーを投げますか?実際の問題の詳細をご記入ください。 –

+0

こんにちは、サイトにようこそ!遭遇している問題に関する詳細を含めると、私たちとあなたの質問に本当に役立ちます。 _ ...私はパラメータに問題があるようです... _は広すぎます。何かエラーがありますか?それは間違ったデータを保存しますか?こことあなたの将来の記事に、これらの詳細を含めてください。 –

答えて

0

はい、単一のストアドプロシージャで複数の更新ステートメントを持つことが可能です。あなたができることは、更新クエリごとに準備されたステートメントを使用しなければならないことです。

私は例をお見せしましょう:

SET @sql = CONCAT('UPDATE dbo.USERS SET userName = @userID, FIRSTNAME = @FirstName, MIDDLENAME = @MiddleName, SURNAME = @LastName, EMAILADDRESS = @email WHERE USERID = @userID;'); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
関連する問題