【问题标题】:For Each loop in Stored Procedure对于存储过程中的每个循环
【发布时间】:2018-04-27 18:05:07
【问题描述】:

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

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

【问题讨论】:

  • 不确定你的意思。请在您调用的表格中添加您对每个参数和预期结果所做的事情的类型。
  • 提供一些代码
  • 您寻求的答案就在这里。 spaghettidba.com/2015/04/24/…
  • 要在不修改过程的情况下获得所有可能的结果,您必须使用所有可能的参数调用过程
  • “所有可能的组合”取决于数据类型。如果所有参数都是bit 类型,那么您有7 种可能的组合(忽略空值,否则为27)。如果其中一个参数是 tinyint 而另外两个是位,则您有超过 1000 种可能性(同样,忽略可能的空值)。如果都是字符串,你有这么多的可能性,我什至不想开始考虑它。

标签: sql-server tsql stored-procedures


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 2015-01-19
    • 1970-01-01
    • 2015-01-10
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多