Как я отменяю Удаление в SQL

Это должно быть i < results.length, потому что с <= вы сравниваете дополнительное несуществующее значение.

results = [{
    "name": "FantasticBeasts",
    "count": 546809,
  },

  {
    "name": "SSIPOS",
    "count": 16257,
  },

  {
    "name": "xyz",
    "count": 16257,
  }
]

for (var i = 0; i < results.length; i++) {
  console.log('result ==>', results[i]);
}

9
задан Sam 10 August 2014 в 11:40
поделиться

4 ответа

Используйте INSTEAD OF DELETE (см. MSDN), инициируйте и решите в триггере, что Вы действительно хотите сделать.

19
ответ дан 4 December 2019 в 07:49
поделиться

Решение, используемое Вместо, Удаляет триггер. Откат tran остановил удаление. Я боялся, что у меня будет каскадная проблема, когда я сделал удаление, но что did'nt, кажется, происходят. Возможно, триггер не может инициировать себя. Во всяком случае, спасибо все для Вашей справки.

ALTER TRIGGER [dbo].[tr_ValidateDeleteForAssignedCalls]
on [dbo].[CAL]
   INSTEAD OF DELETE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @RecType VARCHAR(1)
    DECLARE @UserID VARCHAR(8)
    DECLARE @CreateBy VARCHAR(8)
    DECLARE @RecID VARCHAR(20)

    SELECT @RecType =(SELECT RecType FROM DELETED)
    SELECT @UserID =(SELECT UserID FROM DELETED)
    SELECT @CreateBy =(SELECT CreateBy FROM DELETED)
    SELECT @RecID =(SELECT RecID FROM DELETED)

     -- Check to see if the type is a Call and the item was created by a different user
    IF @RECTYPE = 'C' and not (@USERID=@CREATEBY)

    BEGIN
        RAISERROR ('Cannot delete call.', 16, 1)
        ROLLBACK TRAN
        RETURN
    END

     -- Go ahead and do the update or some other business rules here
    ELSE
        Delete from CAL where RecID = @RecID    

END
7
ответ дан 4 December 2019 в 07:49
поделиться

Триггер может откатывать текущую транзакцию, которая будет иметь эффект отмены удаления. Как плакат выше также состояний, можно также использовать вместо триггера.

1
ответ дан 4 December 2019 в 07:49
поделиться

Согласно документации MSDN о INSTEAD OF DELETE триггеры:

Удаленная таблица, отправленная в УДАЛИТЬ триггер, содержит изображение строк, поскольку они существовали, прежде чем Оператор удаления был выпущен.

Если я понимаю это правильно, УДАЛЕНИЕ на самом деле выполняется. Что я пропускаю?

Так или иначе я не понимаю, почему Вы хотите удалить записи и если бизнес-правила не передаются, затем восстанавливают те записи после удаления. Я имел бы, клянутся, что должно быть легче протестировать при передаче бизнес-правил прежде, чем удалить записи.

И я сказал бы, используют транзакцию, я не услышал прежде о INSTEAD OF триггеры.

1
ответ дан 4 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: