我正在查看是否存在一个基于集合的方式来过滤表数据给定表值参数作为UDF或SPROC的输入。使用表值参数设置基于表的表过滤器
CREATE TABLE activity
(
id int identity primary key,
employeeId int NOT NULL,
stationId char(1) NOT NULL,
type int NOT NULL
);
的表值参数被定义为:
CREATE TYPE activityType AS TABLE(
stationId char(1) NOT NULL,
type int NOT NULL
);
如下表数据:
INSERT INTO activity
(employeeId, stationId, type)
VALUES
(100, 'A', 1), (100, 'B', 2), (100, 'C', 3),
(200, 'A', 1), (200, 'B', 2), (200, 'D', 1),
(300, 'A', 2), (300, 'C', 3), (300, 'D', 2);
我想
作为数据表被定义能够从UI中过滤给定的特定TVP。
实施例1:从应用此TVP查找谁执行活动1 @站A中的所有雇员和活动2 @ B站
DECLARE @activities activityType;
INSERT INTO @activities
VALUES('A', 1),('B', 2)
预期结果:
employeeId
-----------------
100
200
实施例2:查找所有进行过的活动1 @活动1 @活动场所A,活动2 @活动场所B和活动3 @活动场所C
从应用此TVPDECLARE @activities activityType;
INSERT INTO @activities
VALUES('A', 1),('B', 2),('C', 3);
预期结果:
employeeId
-----------------
100
我可以通过循环在TVP和个别地过滤的结果交叉应用此过滤器。然而,我有直觉认为有一种使用CTE或MERGE的Set Based方法,目前我无法包裹头部。
那么,哪里是你的问题? – Sami
什么是适当的基于集合的SQL查询来过滤活动表数据,给定一个表值参数和任意数量的activityType行。有效地,我试图创建一个函数FindEmployeeByStationActivities(@activities activityType READONLY) – UbuntuUser