sql-server - 具有多项选择的存储过程 - 与客户端工具的交互?
问题描述
假设我有一个如下的存储过程:
create procedure p_x
as
begin
select 'a','b','c'
select 'c','d','e'
select 'e','f','g'
end
go
这当然不是真正的代码,但它足以说明我的问题。
我正在寻找最佳性能和处理它的最佳实践。
调用此过程的客户端工具(例如 Informatica Data Quality)将如何反应?
- 它会收到 3 个单独的结果,只是最后一个查询结果还是一次所有结果?
- 每个单独的查询是否会直接发送到客户端(并且程序会暂停直到完成)?还是在程序完成后完成?
- 以这种方式工作是一种好习惯吗?我正在寻找一个 OUTPUT 表类型参数的交换,但如果我是正确的(基于其他故事)这似乎是不可能的(就像输入一样)
- 这种方式对性能有影响吗?如果是这样,有什么方法可以尽可能高效地做到这一点(例如,只将一个结果发送回客户端)
解决方案
将您的问题发布到 Informatica 论坛会更好。他们应该能够准确准确地回答您的问题。但我会试一试。
该工具将如何反应?不知道,但通常支持使用存储过程作为数据源的工具会假设并使用单个(也是第一个)结果集。任何其他将被忽略。去他们的论坛问问。
它会收到3 ...吗?与第一个大致相同的问题和答案。
请问每个单独的查询...?您的过程产生三个结果集。再次,客户如何消费它们是您应该在他们的论坛中询问的问题。该过程本身不会“停止”等待客户端做任何事情。
这是好习惯吗...?在我看来不是。发布一个完整的废话程序也不是讨论这种方法的利弊的有用工具。它可以是一件有用的事情吗?可能。但它并不经常使用 IME。此外,您正在处理一个您不熟悉的工具。无论您使用何种工具,从长远来看,您保持事物越简单越好。
程序是一个工作单元,应该做一件“事情”。如果它产生多个结果集,人们可以争辩说它不再做一件事情,因为从逻辑上讲,每个结果集代表一组不同(即使相关)的事情。通常人们会期望看到结果集之间的某种关系。如果没有关系,那么结果集显然是不同的东西,这违反了过程的概念。您可能想回顾一下耦合和内聚的主题。但我认为我看到了一个更大的问题——我将在下一个项目中解决这个问题。
是否有性能影响...?这个真的没法回答。性能始终是特定于特定情况(查询、模式等)的。基于最后一句话,我认为您还没有对集合方面的思维进行调整——这对于编写高效的 sql 至关重要。相反,我猜您正在考虑包含一个 select 语句的循环,并且每次迭代都会产生一组(可能是 1 个,但谁知道)行。如果您认为您可以“选择”只生成一个 3 行的结果集而不是 3 个 1 行的结果集,那么您很可能会陷入RBAR 领域。无论如何,这真的无法回答。对于 Informatica 人来说,这也是一个问题。
推荐阅读
- python - Open webbrowser in background
- postgresql - 将表数据提取到数组中并修改一些列值,然后插入表中
- c# - 在 C# winform 中,如何在 datagridview 特定单元格中显示图标,而不是布尔类型的 True 或 false?
- fonts - mac 上的浏览器字体已更改,不会变回来
- python - pygame.error:无法打开图像/ship.bmp
- acumos - 在 acumos clio 中加入 dockerized 模型、onap 和许可证问题的模型构建
- vuetify.js - 使用对象而不是列表索引操作 v-list-item-group 模型
- android - Android Room with a View - 未找到 Kotlin Gradle DSL 方法:'kapt()'
- python - 从加入之日起,熊猫每天计数事件
- entity - CRM365 - 获取列表 1:M 实体关系的最简单方法是什么