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 

Und unten ist meine Abfrage, die ich versuche zu laufen. Es beeinflusst keine Zeilen aus irgendeinem Grund. Ich bin ziemlich vertraut mit mysql, die ich bei der Arbeit verwende, und versuche nur, mich mit SQL Server vertraut zu machen .. und ich habe nicht viele Kontexte, warum diese Abfrage nicht korrekt läuft.Was ist falsch an dieser Abfrage für SQL Server?

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

Haben Sie versucht, den Auswahlteil manuell mit den Parametern ausgeführt wird Ihnen zur Verfügung gestellt haben? Was sind die Ergebnisse? – gmiley

+0

yeh versuchen Sie manuell die Abfrage mit dem statischen Parameterwert – Beginner

+0

auszuführen. Denken Sie auch daran, dass Ihre rolback-Anweisung Ihre commit-Anweisung ungültig machen würde (da kein Begin-Tran verknüpft wäre). Was geben Sie zurück? –

Antwort

0

Überprüfen Sie Ihre Parameter Name.In Ihre Verfahren Sie erklären @ param2 aber wenn Sie @ params2 verwenden execute

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

Und dann können Sie [XACT_ABORT] (https://msdn.microsoft.com/en-us/library/ms188792.aspx) und [THROW] (https://msdn.microsoft.com/en- us/library/ee677615.aspx) wenn Sie immer noch besorgt sind. –