2013-02-07 155 views
1

我希望能够查询多个相同类型的参数(例如,多个ID,只是为了保持示例简单),所以我只需要执行一次而不是一次为每个个人ID。在我的单实例过程返回的地方,比如说,一个名字,我的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]); 

我能做到这一点,如果是这样,有一个简单的机制,用于处理那些没有按”这样的事情t涉及游标和各种过度复杂的东西?这甚至会被认为是一个好主意吗?

+2

请参阅[Sommarskog关于数组的文章](http://www.sommarskog.se/arrays-in-sql.html)表值参数非常简单且功能强大,XML列表参数往往具有最佳性能。 – Andomar

回答

0

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

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

例如,你可以尝试传:

  • TVPs在SQL Server 2008+
  • 分隔字符串,然后在proc
  • XML,然后在proc解析分裂
  • 一个表名,然后由proc动态读取
  • 使用预先知道的表名和处理函数

对传递数组的快速搜索是SQL Server将产生更多结果,其中最好的就是@Andomar提到的Arrays and Lists in SQL Server