Я создаю хранимую процедуру для поиска в таблице. У меня есть много разных столбцов поиска, все из которых являются необязательными. Есть ли способ создать хранимую процедуру, которая будет обрабатывать это? Допустим, у меня есть таблица с четырьмя столбцами ID, N1, N2 и N3. Я мог бы сделать что-то вроде этого:
Таблица:
INSERT INTO [dbo].[Sample]
VALUES ('1', 'A,B,C', 'A,B,C', 'A,B,C'),
('2', 'B,D,N', 'B,D,N', 'B,D,N'),
('3', 'A,N,S', 'A,N,S', 'A,N,S'),
('4', 'S,F,G', 'S,F,G', 'S,F,G'),
('5', 'D,F,K', 'D,F,K', 'D,F,K'),
('6', 'S,H,Y', 'S,H,Y', 'S,H,Y'),
('7', 'Z,B,C', 'Z,B,C', 'Z,B,C')
Хранимая процедура:
CREATE PROCEDURE dbo.Sample2
@n11 varchar(max) = null,
@n12 varchar(max) = null,
@n21 varchar(max) = null,
@n22 varchar(max) = null,
@n31 varchar(max) = null,
@n32 varchar(max) = null
AS
BEGIN
SELECT COUNT(*)
FROM Sample
WHERE
(@n11 IS NULL OR Sample.N1 LIKE '%' + @n11 + '%'
OR @n12 IS NULL OR Sample.N1 LIKE '%' + @n12 + '%')
AND (@n21 IS NULL OR Sample.N2 LIKE '%' + @n21 + '%'
OR @n22 IS NULL OR Sample.N2 LIKE '%' + @n22 + '%')
AND (@n31 IS NULL OR Sample.N3 LIKE '%' + @n31 + '%'
OR @n32 IS NULL OR Sample.N3 LIKE '%' + @n32 + '%')
END
Если пользователь вводит @ n11 как A и оставляет остальные, так как N1 содержит A в 2 строках, вывод должен быть 2, но вышеупомянутый запрос предоставляет 7. Если параметр не указан, мне нужно его игнорировать и передать остаток в условие where.