Я должен действительно использовать “НАБОР XACT_ABORT НА”?

Как указал Кристофер, принятый ответ больше не является правильным. Потому что пустой массив все еще оценивается как истинный.

obj.children = []
<div ng-show='obj.children'> 
  As of Angular 1.3 this always shows if children exists as part of obj. 
</div>

Текущее решение

В этом случае массив существует. Но если вы дадите angular нулевой элемент массива массива для оценки, и такого элемента нет, он будет оценен как ложный.

<div ng-show='obj.children[0]'> 
  This will not show because there is no element in the array at 0
</div>

Вы также можете использовать это с [n] в качестве любого нумерованного элемента в массиве, чтобы показывать только тогда, когда число больше, чем n. Если вы используете obj.children [2], он будет отображаться, только если у вас есть 3 или более элементов в массиве.

25
задан gbn 28 May 2009 в 09:01
поделиться

3 ответа

Помните, что есть ошибки, которые TRY-CATCH не будет фиксировать с или без XACT_ABORT .

Однако SET XACT_ABORT ON не влияет улавливание ошибок. Это действительно гарантирует, что любая транзакция будет отменена / обречена. Когда "OFF", у вас все еще есть выбор: фиксация или откат (в зависимости от xact_state). Это основное изменение поведения SQL 2005 для XACT_ABORT

. Он также снимает блокировки и т. Д., Если срабатывает тайм-аут команды клиента и клиент отправляет директиву «abort». Без SET XACT_ABORT блокировки могут оставаться, если соединение остается открытым. Мы с моим коллегой (MVP) тщательно протестировали это в начале года.

35
ответ дан 28 November 2019 в 21:13
поделиться

Я считаю, что SET XACT_ABORT ON был требованием при выполнении распределенных транзакций.

Из книг в сети: XACT_ABORT должен быть установлен в ON для операторов изменения данных в неявной или явной транзакции с большинством поставщиков OLE DB, включая SQL Server. Единственный случай, когда эта опция не требуется, - это если провайдер поддерживает вложенные транзакции. Для получения дополнительной информации см. Распределенные запросы и распределенные транзакции.

3
ответ дан 28 November 2019 в 21:13
поделиться

XACT_ABORT действительно влияет на обработку ошибок: он прервет все batch при обнаружении ошибки, и любой код, следующий за строкой, вызвавшей ошибку (включая проверку ошибок!), НИКОГДА не будет выполняться. Есть два исключения из этого поведения: XACT_ABORT заменяется TRY ... CATCH (блок CATCH всегда будет выполняться, и транзакции НЕ будут автоматически откатываться, а только визуализируются как нефиксируемые), и XACT_ABORT игнорирует RAISERROR.

1
ответ дан 28 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

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