将多个查询合并为一个

时间:2013-02-07 17:20:21

标签: sql-server

我希望能够查询多个相同类型的参数(例如,几个ID,只是为了保持示例简单)所以我只需要为每个单独的ID执行一次而不是一次。我的单实例proc返回一个名称,我的get-all proc将返回一个单列的名称表。

我现在拥有的:

EXEC MyProc(123);
EXEC MyProc(456);
EXEC MyProc(789);

我想要的是什么:

// Square brackets aren't correct syntax,
// they just represent a list that contains x number of IDs
EXEC MyProc([123, 456, 789]);  

我可以这样做,如果是这样,是否有一个简单的机制来处理这样的事情,不涉及游标和各种过于复杂的事情?这甚至会被认为是一个好主意吗?

1 个答案:

答案 0 :(得分:0)

要只执行一次proc,你必须重构你的proc以使用多个ID,因为没有T-SQL函数或语法糖为你做这个。

如果这是varadic,因为可能有一个或多个ID,您必须在一个参数中将多个ID传递给您的proc。在更新版本的SQL Server中,这种类型的传递可以更容易。

例如,您可以尝试传递:

    SQL Server 2008 +中的
  • TVPs
  • 分隔的字符串,然后在proc
  • 中拆分
  • xml然后在proc
  • 中解析
  • 一个表名,然后由proc动态
  • 读取
  • 使用预先由proc和调用者都知道的表名

快速搜索传递数组是SQL Server将产生更多结果,其中最好的是Arrays and Lists in SQL Server,如@Andomar所述。