2015-04-18 3 views
0

Я создал SQL-запрос w/c, имеет оператор Delete, но, к сожалению, инструкция Delete кажется не выполняющей. Что не так с моей операцией SQL.SQL Server не выполняет команду Delete

Вот мой код:

BEGIN TRAN 
BEGIN TRY 
DECLARE @Mid VARCHAR(100) = '100303000' 
DECLARE @Cnt INT 
DECLARE @ScHeader TABLE 
(
    ScHeaderId UNIQUEIDENTIFIER 
) 
declare @SCHeaderId uniqueidentifier 
    -- get ids to be deleted 
    INSERT INTO @ScHeader(ScHeaderId) 
    SELECT scd.ServiceChargesId 
    FROM ServiceChargeDetails scd 
    INNER JOIN ServiceCharges sc ON scd.ServiceChargesId = sc.ServiceChargesId 
    INNER JOIN CreditCardMID cc ON cc.CreditCardMIDId = scd.CreditCardMIDId 
    WHERE cc.MID = @Mid; 
     /* 
      do some other task here Related to @ScHeaderId 
     */ 

    SELECT @Cnt = COUNT(*) FROM CreditCardMID WHERE MID = @Mid; 
    Print 'Count before delete ' + Cast(@Cnt as VARCHAR(10)) 
    PRINT 'Deleting Mid ' + @Mid; 
    DELETE FROM CreditCardMID WHERE MID = @Mid; -- not executed 
    PRINT 'Done deleting mid '; -- -- not executed 
    SELECT @Cnt = COUNT(*) FROM CreditCardMID WHERE MID = @Mid;-- not executed 
    Print 'Count after delete ' + Cast(@Cnt as VARCHAR(10)) -- not executed 
    COMMIT TRAN 
END TRY 
BEGIN CATCH 
    ROLLBACK TRAN 
    PRINT @@ERROR 
END CATCH 

Вот результат из окна сообщений:

enter image description here

+2

Возможно, попробуйте напечатать 'ERROR_MESSAGE()' или 'ERROR_NUMBER()' в вашем 'CATCH', чтобы узнать фактическую ошибку: [Использование TRY ... CATCH в Transact-SQL] (https://technet.microsoft.com/en-us/library/ms179296%28v= sql.105% 29.aspx) – har07

+1

Ищите триггер на таблице 'CreditCardMID' –

+0

, что триггер стоил мне времени. спасибо A –

ответ

3

"0" появляется после "(0 ряда (ы) пострадавших)" подразумевает, что удаление не сработало, и уловка уволена. Можете ли вы запустить этот код без пары catch (внутри пары tran/rollback tran), чтобы узнать, что это за ошибка (я предполагаю, что это ошибка из триггера в таблице CreditCardMID)

+0

Я нашел триггер w/c ограничивает удаление строки на основе определенного условия. Спасибо пользователю2818323. –

+0

Upvote! Больше бонусов за полезные ответы! –

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