2017-02-21 5 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 .. и у меня нет большого контекста, почему этот запрос работает неправильно.Что не так в этом запросе для SQL Server?

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

Вы пробовали выполнение выбора участка вручную с параметрами, которые вы предоставили? Каковы результаты? – gmiley

+0

yeh попробуйте выполнить запрос вручную со статическим значением параметра – Beginner

+0

. Кроме того, рассмотрите, что ваш оператор rollback фактически сделал ваш оператор фиксации недействительным (так как не было связано с Begin Tran), что вы возвращаете? –

ответ

0

Проверьте параметр Name.In ваши процедуры вы объявляете @ param2 но когда Execute вы используете @ 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/library/ee677615.aspx), если вы все еще обеспокоены. –

Смежные вопросы