В настоящее время мы определим список констант (в основном они соответствуют перечислениям мы определили в бизнес-слое) в верхней части хранимой процедуры, как так:Каковы различные способы обработки «перечислений» на SQL-сервере?
DECLARE @COLOR_RED INT = 1
DECLARE @COLOR_GREEN INT = 2
DECLARE @COLOR_BLUE INT = 3
Но они часто получают повторены для многих хранимых процедур так есть много дублирования.
Другая техника, которую я использую, если для процедуры требуется только одна или две константы, передать их в качестве параметров хранимой процедуры. (с использованием того же соглашения верхнего регистра для постоянных значений). Таким образом, я уверен, что значения в уровне бизнес-уровня и данных согласованы. Этот метод не подходит для множества значений.
Каковы мои другие варианты?
Я использую SQL Server 2008 и C#, если это имеет значение.
Обновление Поскольку я использую .Net, есть ли способ, которым могут быть определены пользовательские типы (CLR)?
Внешний ключ на перечислениях хорош, но как значения используются в хранимой процедуре? – tpower
@tpower: Не совсем уверен, что я понимаю ваш вопрос, но я обычно передавал значения строки перечисления в sproc и сразу же переводил их в внешние ключи, используя указанную функцию. Следовательно, приложение использует только значения перечисления, код БД использует только значения внешнего ключа. – Adamski
Что я имею в виду, если хранимая процедура содержит некоторую бизнес-логику, например, «IF @MyVariable = @ MY_ENUMERATION_VALUE_2 THEN», где нам нужно указать значение, которое внешние ключи здесь не помогают. – tpower