В моем приложении есть функция, с помощью которой пользователь может вводить несколько полей поиска, и они будут использоваться для запроса БД, например, пользователь вводит:
Смит 123456 Лондон 12 / 01/2020
Эти поля будут переданы хранимой процедуре в виде табличного параметра (состоящего из одного столбца как varchar). SP использует представление в качестве источника данных. Например, для указанного выше пользовательского поиска будет представление со следующими столбцами:
number, int
firstname, varchar
lastname, varchar
dob, datetime
address, varchar
SP должен динамически создавать запрос sql, и этот запрос должен выглядеть как
select * from customersview
where 'smith' in (firstname, lastname, address)
and 123456 in (number)
and 'london' in (firstname, lastname, address)
and '12/01/2029' in (dob)
Итак, что делает sp:
- Возьмите поисковые фильтры и определите, какой они тип данных
- Сопоставьте тип данных фильтров с типом данных столбцов, так что например, фильтр
int
сопоставлен со всеми int
столбцами и т. д. c.
. Итак, я начал со следующего:
select COLUMN_NAME, DATA_TYPE
from INFORMATION_SCHEMA.VIEWS v
join INFORMATION_SCHEMA.COLUMNS c on c.TABLE_SCHEMA = v.TABLE_SCHEMA
and c.TABLE_NAME = v.TABLE_NAME
where c.TABLE_NAME = 'customersview'
, который будет дайте мне столбцы представления и их тип данных.
Но как я могу сопоставить типы данных (потому что фильтры входят в TVP), чтобы я мог строить различные условия?
В качестве альтернативы, я можно изменить TableType так, чтобы он имел 3 уникальных столбца (int, varchar, datetime), и приложение определяет тип данных и добавляет значение в правильный столбец.