Stored procedures 多值存储过程参数只是一种糟糕的做法吗?

Stored procedures 多值存储过程参数只是一种糟糕的做法吗?,stored-procedures,parameters,multivalue,Stored Procedures,Parameters,Multivalue,我对将多个ID参数传递给单个存储过程有一种奇怪的厌恶。例如,这种感觉是错误的: GetMyObject(ListofId、OtherParam1、OtherParam2等) 我知道如何做(如果必须的话,我会正确地做)。。但我觉得我不应该这么做。我觉得它违背了“get item”存储过程/子程序的目的。我觉得我应该构建SP以支持适当的过滤器参数。如果我的来电者有一个ID列表,他们不应该给sp打那么多次电话吗 帮助?一个“按ID获取项目”例程不应该返回多个对象,因为这在语言上完全没有意义 “按ID获

我对将多个ID参数传递给单个存储过程有一种奇怪的厌恶。例如,这种感觉是错误的:

GetMyObject(ListofId、OtherParam1、OtherParam2等)

我知道如何做(如果必须的话,我会正确地做)。。但我觉得我不应该这么做。我觉得它违背了“get item”存储过程/子程序的目的。我觉得我应该构建SP以支持适当的过滤器参数。如果我的来电者有一个ID列表,他们不应该给sp打那么多次电话吗

帮助?

一个“按ID获取项目”例程不应该返回多个对象,因为这在语言上完全没有意义

“按ID获取项目”例程?当然,如果你有一个合适的用例,并且它会经常被使用

但大多数情况下,是的,不是一个按ID返回多个项目的例程,而是一个根据应用程序适当的过滤参数返回项目的例程(例如,“从1月8日起,给我超过10美元的所有交易”)

顺便说一下,有时一系列ID(例如5到10之间的所有ID)是一组完全有效的过滤器


顺便说一句,这不一定只是MySQL或SQL的一般问题。几乎任何一种语言的数据集查询API都会提出这些相同的设计问题,它们的答案通常非常相似。

我想这是一种有趣的思考方式。为什么一系列ID不能是一组筛选器?我一次又一次看到的问题是,为了“性能”,应用程序需要在一次调用中包含所有项(用于ID列表)。因此,他们不想打16个电话,而是想用16个ID打一个电话。@deLux_247:如果应用程序需要这样的电话,就给他们。对于某些用例来说,这不是一个不合理的选择。但我会仔细研究应用程序为什么需要它——它从哪里获得ID?如果它们首先来自数据库,为什么它不直接请求所需的数据呢?真的会有那么多ID吗?例如,如果用例一次只有两个或三个,我不明白为什么它不能为每个ID调用一次,除非您的基础结构严重过载。如果调用方经常需要一组对象,并且有一组ID,我不会强迫他们多次调用单个过程。不同意GetItem(…)返回多个项,但GetItems(…)执行此操作没有问题。数据库调用非常昂贵。