Я согласен с тем, что большинство говорят, лучше всего использовать перечисления при работе с набором констант. Однако, если вы программируете на Android, есть лучшее решение: IntDef Annotation .
@Retention(SOURCE)
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST,NAVIGATION_MODE_TABS})
public @interface NavigationMode {}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
...
public abstract void setNavigationMode(@NavigationMode int mode);
@NavigationMode
public abstract int getNavigationMode();
Аннотация IntDef превосходит перечисления одним простым способом, она занимает значительно меньше места, поскольку является просто маркером времени компиляции. Он не является классом и не имеет свойства автоматического преобразования строк.
Выполните следующее и убедитесь сами:
CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO
CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
DBCC USEROPTIONS;
DBCC USEROPTIONS
отобразит текущий уровень изоляции вместе со всеми другими параметрами SET.
Из книг на линии
Только одна из ОТДЕЛЕНИЯ ТРАНЗАКЦИИ Опции УРОВНЯ можно установить за раз, и он остается установленным для этого соединения пока он не будет явно изменен. это становится поведением по умолчанию, если вариант оптимизации указан в уровень таблицы в предложении FROM оператор.
Уровень изоляции не откатывается вместе с транзакцией.
Уровень изоляции остается текущим, даже если вы вызываете процедуры и функции.