Я хочу, чтобы при выполнении запроса, например, DELETE FROM Contact
, и во время транзакции возникла ошибка, он должен удалить строки, которые можно удалить, и собрать все соответствующие ошибки для строк, которые невозможно удалить.Как сохранить транзакцию, если она не работает для некоторых строк?
ответ
Для SQL Server вы не собираетесь разрушать атомарность команды Delete в рамках одного оператора - даже выданного вне явной транзакции, вы будете действовать в неявной форме - например, все или ничего, как вы видели.
В рамках явной транзакции ошибка по умолчанию откатывает всю транзакцию, но это может быть изменено, чтобы просто попробовать и откат одного оператора, который был ошибочен в общей транзакции (нескольких операторов), для этой настройки это SET XACT_ABORT.
Поскольку ваше удаление - это один оператор, XACT_ABORT не может вам помочь - строка будет ошибочной, а удаление будет отменено.
Если вы знаете состояние ошибки вы собираетесь к лицу (например, нарушение ограничений FK, то вы можете убедиться, что вы удалить, есть подходящий, где положение, чтобы не пытаться удалить строки, которые вы знаете, будет генерировать ошибку.
Если вы используете MySQL, вы можете take advantage of the DELETE IGNORE
syntax.
Увы, Я ответил на свой вопрос – Shimmy
Это функция, которая полностью зависит от того, какой колодец базы данных вы используете. Некоторые будут иметь его, а некоторые - нет.
Например, Oracle предлагает нам возможность регистрировать ошибки DML навалом. The example in the documentation uses an INSERT statement, но тот же принцип применяется к любому оператору DML.
Я ответил на свой вопрос, это MS SQL-Server. – Shimmy
- 1. Toggle visiblity не работает для некоторых строк?
- 2. Вставить транзакцию, если она не существует в SQL Server
- 3. Как сохранить высоту div, если она изменилась?
- 4. Как сохранить транзакцию Apple Pay для клиента?
- 5. Почему string.search работает для некоторых строк, а не для других?
- 6. транзакцию, если часть ее не удается
- 7. индекс символа в строке js не работает для некоторых строк
- 8. Функция не возвращается, даже если она работает
- 9. Как работает конечная машина, если она неоднозначна?
- 10. ftp_connect не работает для некоторых хостов
- 11. JQuery.ajax/asp.net: если вызываемая страница возвращает параметры, которые она работает, но если она выполняет запрос linq, тогда она не работает
- 12. jQuery если инструкция не работает как она должна
- 13. Функция getimagesize() не работает для некоторых изображений
- 14. добавить легенду для некоторых строк
- 15. DateFormat Pattern для некоторых строк
- 16. StartActivity не работает для некоторых элементов RecyclerView
- 17. Функция JavaScript не работает, если она не установленаTimeout
- 18. magento getOptionId не работает для некоторых меток
- 19. Ошибка NumberFormat.parse() для некоторых строк валюты
- 20. Простой, если оператор не работает (сравнение строк)
- 21. str_replace() не работает для некоторых символов
- 22. Как использовать транзакции (начать транзакцию, совершить транзакцию)?
- 23. Regex не работает для некоторых случаев - PHP
- 24. Как задержать выполнение некоторых строк
- 25. Exec возвращает ложь, даже если она работает
- 26. Три уровня jQGrid только для некоторых строк
- 27. Замена некоторых «\ п» не работает
- 28. как обрабатывать переменную, если она не возвращается
- 29. Как создать папку, если она не существует?
- 30. fopen не работает для некоторых URL-адресов?
Это гораздо лучший подход, чем удаление методом проб и ошибок. – Paddy
Я знаю, что это за ошибка, я просто хочу использовать ошибку вместо того, чтобы WHERE, т. е. удалять все строки, которые можно удалить. – Shimmy
Вы не сможете на SQL Server, не перепрыгивая через обручи (запустите удаление пакета цикла и сделайте размер партии только 1 - и используйте Set XACT и т. д. - учитывая thos e hoops, и вы знаете, где предложение, в котором вы нуждаетесь, я бы просто использовал его. – Andrew