我正在查看是否存在一個基於集合的方式來過濾表數據給定表值參數作爲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