SQL服务器:有存储过程return数据集并进行比较
SQL Server : have stored procedure return dataset and carry out comparison
我创建了一个存储过程QueryProductLines @ParamProductLineId Int
。这工作正常并且 returns 它应该的结果。
但是,我现在想创建一个额外的存储过程 FindCommonProductLines @ParamProductLineIdOne INT, @ParamProductLineIdTwo
,它将调用 QueryProductLines
存储过程两次,并与 return 任何共同产品进行比较。
例如:
- 产品线一:
- 产品 A 产品 B 产品 C 产品 D 产品 E
- 产品线二:
- 产品 C、产品 D、产品 F、产品 G
存储过程将 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常见产品的专门查询会更有效。
我创建了一个存储过程QueryProductLines @ParamProductLineId Int
。这工作正常并且 returns 它应该的结果。
但是,我现在想创建一个额外的存储过程 FindCommonProductLines @ParamProductLineIdOne INT, @ParamProductLineIdTwo
,它将调用 QueryProductLines
存储过程两次,并与 return 任何共同产品进行比较。
例如:
- 产品线一:
- 产品 A 产品 B 产品 C 产品 D 产品 E
- 产品线二:
- 产品 C、产品 D、产品 F、产品 G
存储过程将 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常见产品的专门查询会更有效。