SQL服务器:有存储过程return数据集并进行比较

SQL Server : have stored procedure return dataset and carry out comparison

我创建了一个存储过程QueryProductLines @ParamProductLineId Int。这工作正常并且 returns 它应该的结果。

但是,我现在想创建一个额外的存储过程 FindCommonProductLines @ParamProductLineIdOne INT, @ParamProductLineIdTwo,它将调用 QueryProductLines 存储过程两次,并与 return 任何共同产品进行比较。

例如:

存储过程将 return 产品 C 和产品 D(因为它们在两个产品线中都很常见)。

这只能在存储过程中实现吗?任何关于如何实现这一目标的概述都将不胜感激。

一种方法是调用每个产品线的现有存储过程,使用 INSERT...EXEC 将每个产品线的结果捕获到临时 table/variable 中。 table/variable 架构必须与 QueryProductLines 结果集的架构相匹配,尽管您可以在最终查询中忽略不需要的列。

下面是这种技术的一个例子。

CREATE PROCEDURE dbo.FindCommonProductLines
      @ParamProductLineIdOne int
    , @ParamProductLineIdTwo int
AS
SET NOCOUNT ON;

DECLARE @ProductLineIdOne TABLE(
    ProductName varchar(100) PRIMARY KEY
);
DECLARE @ProductLineIdTwo TABLE(
    ProductName varchar(100) PRIMARY KEY
);

INSERT INTO @ProductLineIdOne(ProductName)
    EXEC dbo.QueryProductLines @ParamProductLineId = @ParamProductLineIdOne;
INSERT INTO @ProductLineIdTwo(ProductName)
    EXEC dbo.QueryProductLines @ParamProductLineId = @ParamProductLineIdTwo;

SELECT p1.ProductName
FROM @ProductLineIdOne AS p1
JOIN @ProductLineIdTwo AS p2 ON p2.ProductName = p1.ProductName;
GO

从性能的角度来看,但以代码重用为代价,开发针对return常见产品的专门查询会更有效。