У меня N таких таблиц:
foo_1_data
(
id int,
some_foo_data_1 varchar(100),
some_foo_data_2 char(5)
)
foo_2_data
(
id int,
some_foo_data_1 varchar(100),
some_foo_data_2 char(5)
)
bar_1_data
(
id int,
some_bar_data_1 decimal(10,2),
some_bar_data_2 datetime
)
bar_2_data
(
id int,
some_bar_data_1 decimal(10,2),
some_bar_data_2 datetime
)
Таблицы основаны на разных данных - foo_data
и bar_data
- и генерируются пользователем, и есть идентификатор - foo_N_data
и bar_N_data
- set.
Теперь я хочу реализовать проверку записей в этих таблицах с помощью хранимой процедуры, чтобы следовать определенным бизнес-правилам на стороне получателя, которые мы не можем контролировать.
Пример:
some_foo_data_1
- это varchar (100) - это имя, и в нашей системе оно может быть от 0 до 100 символов, но на принимающей стороне оно должно быть от 2 до70 символов. some_bar_data_1
- десятичное число (10,2), и оно должно быть в диапазоне от 0 до 100 (скажем, в процентах)
Мы попытались реализовать хранимые процедуры, называемыенапример, sp_rule_name
, который берет исходную таблицу и столбец и проверяет ее с помощью Dynamic SQL
следующим образом:
EXEC('SELECT ' + @column_to_validate + ' FROM ' + @table_to_validate + ' WHERE ...')
Это создает повторно используемый код между различными процедурами проверки (по одной для каждойнабор данных - один для foo_data
и один для bar_data
), но код трудно понять и поддерживать из-за сочетания T-SQL
и Dynamic SQL
.Мы также пытались использовать functions
в полях, но отбросили его из-за низкой производительности.
Существует ли эффективный и многократно используемый способ проверки данных из динамических таблиц?
Примечание: Мы знаем, как будет выглядеть структура таблицы как foo
, так и bar
, но мы не знаем значение N, поэтому мы не можем вызвать его напрямую.