У меня есть следующая animal
таблица:
id | action
------------------
duck | cuack
duck | fly
duck | swim
pelican | fly
pelican | swim
Я хочу создать хранимую процедуру и передать группу значений в один параметр:
EXEC GuessAnimalName 'cuack,fly,swim'
Result:
duck
Так что, если он вздрагивает, летает и плавает, значит, это утка. Но также:
EXEC GuessAnimalName 'fly,swim'
Result:
pelican
---
EXEC GuessAnimalName 'fly'
Result:
No results
Номер параметра является динамическим.
Чтобы угадать имя животного, все указанные действия должны совпадать или находиться в таблице animal
.
Это то, что я имею до сих пор:
DECLARE @animal AS TABLE
(
[id] nvarchar(8),
[action] nvarchar(16)
)
INSERT INTO @animal VALUES('duck','cuack')
INSERT INTO @animal VALUES('duck','fly')
INSERT INTO @animal VALUES('duck','swim')
INSERT INTO @animal VALUES('pelican','fly')
INSERT INTO @animal VALUES('pelican','swim')
-- Parameter simulation
DECLARE @params AS TABLE
(
[action] nvarchar(16)
)
INSERT INTO @params VALUES('cuack')
INSERT INTO @params VALUES('fly')
INSERT INTO @params VALUES('swim')
SELECT
a.[id]
FROM
@animal a
INNER JOIN
@params p
ON
a.[action] = p.[action]
GROUP BY
a.[id]
HAVING COUNT(a.[action]) IN (SELECT COUNT([action]) FROM @animal GROUP BY [id])
Что дает результат:
Result:
--------
duck
--------
pelican
Возвращается только duck
.