对于存储过程中的每个循环

时间:2018-04-27 18:05:07

标签: sql-server tsql stored-procedures

我有一个包含三个参数的存储过程:     参数1 - 有200个数据     参数2 - 有6个数据     参数3 - 150数据

我想将结果的所有可能组合转储到表中。有什么想法吗? 我想做类似以下的事情  对于每个参数1     对于每个参数2        对于每个参数3

1 个答案:

答案 0 :(得分:2)

假设参数是表值参数,而“数据”则表示行 - 要获得所有可能的组合,您使用交叉连接,就像使用常规表一样:

-- It's better practice to specify the columns but I don't know what your columns are...
SELECT * 
FROM @TVP1
CROSS JOIN @TVP2
CROSS JOIN @TVP3

交叉连接将返回两个表的各行之间的所有可能组合 - 这是另一个帮助您可视化的示例:

DECLARE @T as table
(
    Col int
);

INSERT INTO @T (Col) VALUES (0), (1);


SELECT  t1.Col As C1, 
        t2.Col As C2,
        t3.Col As C3
FROM @T t1
CROSS JOIN @T t2
CROSS JOIN @T t3
ORDER BY C1, C2, C3


C1  C2  C3
0   0   0
0   0   1
0   1   0
0   1   1
1   0   0
1   0   1
1   1   0
1   1   1