2017-02-21 3 views
-1
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[spIncTurn_Member_fix] 
(
/* param1 = part = edu,mem,women,personal 
    param2 = member_id or code(dept_name?) 
*/ 
    @param1 varchar(20), 
    @param2 varchar(20) 
) 
AS 
    SET NOCOUNT ON 

    BEGIN TRANSACTION 

     INSERT INTO BibleHistory (id, Bible, Chapter, Verse, [Content], member_id, dept_code, verse_id, dept_name, DateWrote, name, turn, forced_write, bible_lang) 
      SELECT  
       BibleWrote.id, BibleWrote.Bible, BibleWrote.Chapter, 
       BibleWrote.Verse, BibleWrote.[Content], 
       BibleWrote.member_id, BibleWrote.dept_code, 
       BibleWrote.verse_id, BibleWrote.dept_name, 
       BibleWrote.DateWrote, BibleWrote.name, BibleWrote.turn, 
       BibleWrote.forced_write, BibleWrote.bible_lang 
      FROM   
       BibleWrote 
      INNER JOIN 
       Member ON BibleWrote.member_id = Member.id --AND BibleWrote.turn < Member.turn 
      WHERE  
       (BibleWrote.dept_code = @param1) 
       AND (Member.id = @param2) 

     IF @@ERROR <> 0 
     BEGIN 
      /* ?- Rollback the transaction */ 
      ROLLBACK 
      RAISERROR ('Error in copying BibleWrote into BibleHistory.', 16, 1) 

      RETURN 
     END 

     DELETE FROM BibleWrote 
     FROM BibleWrote 
     INNER JOIN Member ON BibleWrote.member_id = Member.id --AND BibleWrote.turn < Member.turn 
     WHERE (BibleWrote.dept_code = @param1) AND (Member.id = @param2) 

     IF @@ERROR <> 0 
     BEGIN 
      /* -? Rollback the transaction */ 
      ROLLBACK 
      RAISERROR ('Error in deleting BibleWrote table.', 16, 1) 

      RETURN 
     END 

     COMMIT 
     RETURN 

以下は実行しようとしているクエリです。何らかの理由で行に影響を与えません。私は職場で使っているmysqlに精通しており、SQL Serverに慣れ親しんでいます。なぜこのクエリが正しく動作しないのかわかりません。あなたの手順は、あなたが宣言Name.Inあなたのパラメータを確認してくださいSQL Serverのこのクエリで何が問題になっていますか?

EXEC [dbo].[spIncTurn_Member_fix] @param1='personal', @params2='671' 
GO 
+0

はあなたが提供しているパラメータを使用して手動で選択部分を実行しようとしたことがありますか?結果は何ですか? – gmiley

+0

yeh静的パラメータ値 – Beginner

+0

を使用してクエリを手動で実行してみてくださいまた、rolback文が実際にcommitステートメントを無効にすると考えています(Begin Tranは関連付けられていないため)。 –

答えて

0

@ PARAM2いますが、params2 @使用実行時に

EXEC [dbo].[spIncTurn_Member_fix] @param1='personal', @params2='671' 
+0

そして、[XACT_ABORT](https://msdn.microsoft.com/en-us/library/ms188792.aspx)と[THROW](https://msdn.microsoft.com/en-us/)を利用することができます。 us/library/ee677615.aspx)をご覧ください。 –

関連する問題