Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将多个查询合并为一个查询_Sql Server - Fatal编程技术网

Sql server 将多个查询合并为一个查询

Sql server 将多个查询合并为一个查询,sql-server,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

我希望能够查询多个相同类型的参数,例如,多个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]);  

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

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

如果这是varadic,因为可能有一个或多个id,那么必须在一个参数中将多个id传递给proc。在较新版本的SQL Server中,传递排序数组会更容易

例如,您可以尝试传递:

在SQLServer2008中+ 然后在进程中拆分的分隔字符串 然后在进程中解析的xml 然后由proc动态读取的表名 使用proc和调用者事先都知道的表名 快速搜索传递的数组是SQL Server将产生更多的结果,其中最好的是@Andomar所提到的结果。

参见表值参数简单且功能强大,XML列表参数往往具有最佳性能。