具有多个选择的存储过程 - 与客户端工具的交互?

问题描述 投票:1回答:1

假设我有一个存储过程如下:

create procedure p_x
as
begin
   select 'a','b','c'
   select 'c','d','e'
   select 'e','f','g'
end
go

这当然不是真正的代码,但它足以说明我的问题。

我正在寻找最佳性能和最佳实践来应对它。

  1. 调用此过程的客户端工具(例如Informatica Data Quality)将如何做出反应? 它会收到3个单独的结果,只是最后一个查询结果还是一次收到所有结果? 是否将每个单独的查询直接发送给客户端(并且程序将暂停直到完成)?或者在程序结束后完成了吗? 以这种方式工作是一种好习惯吗?我正在寻找OUTPUT表类型参数的交换,但如果我是正确的(基于其他故事),这似乎不可能(仅作为输入) 这种方式会对性能产生影响吗?如果是这样,尽可能高效地完成这项工作的方法是什么(例如,只将一个结果发送回客户端)
sql-server stored-procedures multiple-select
1个回答
0
投票

通过将您的问题发布到Informatica论坛,您可以获得更好的服务。他们应该能够准确,准确地回答您的问题。但我会试一试。

该工具将如何反应?不知道,但通常支持使用存储过程作为数据源的工具将假定并将使用单个(和第一个)结果集。任何其他人都将被忽略。去他们的论坛询问。

它会收到3 ......?与第一个问题和答案大致相同。

将每个单独的查询...?您的过程生成三个结果集。客户如何消费它们也是您应该在论坛中提出的问题。程序本身不会“停止”等待客户端做任何事情。

这是好的做法......?不是我认为的。发布完整的无意义程序也不是讨论这种方法的优缺点的有用工具。这可能是有用的吗?有可能。但它经常不是IME。此外,您正在处理一个您不熟悉的工具。无论您使用何种工具,从长远来看,您保持更好的状态就越简单。

程序是一个工作单元,应该做一件“事情”。如果它产生多个结果集,可以说它不再做一件事,因为从逻辑上讲,每个结果集代表一组不同的(即使相关的)事物。通常人们会期望看到结果集之间存在某种关系。如果没有关系,那么结果集显然是不同的东西,违反了程序的想法。您可能想要查看耦合和内聚的主题。但我认为我看到了一个更大的问题 - 我将在下一个项目中解决。

是否有性能影响......?这真的无法回答。性能总是,始终特定于特定情况(查询,架构等)。基于最后一句话,我认为你没有根据集合进行思考 - 这对于编写高效的sql至关重要。相反,我猜你正在考虑一个包含select语句的循环,每次迭代都会产生一组(可能是1但谁知道)行。如果你认为你有“选项”只生成3行的结果集而不是1行的3个结果集,那么你很可能会被卡在RBAR土地上。无论如何,这真的无法回答。这也是Informatica人的一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.