首页 > 解决方案 > 对于存储过程中的每个循环

问题描述

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

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

标签: sql-servertsqlstored-procedures

解决方案


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

-- 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

推荐阅读