2014-12-04 67 views
0

Im使用MS SQL,并有一段代码需要多个基本SP来运行我想要做的是将它们压缩到一个。在SP中选择多个返回一个记录集

ALTER PROCEDURE SP_JOB_IMPORT_MULTICALL 
(
@driverid as int, 
@vehicleid as int, 
@place as nvarchar(50) 
) 
AS 
DECLARE @imval as int 

BEGIN 
    SET @imval = (SELECT ad.ImportValue FROM Admin AS ad WHERE ad.ID=1) +1 
END 

BEGIN 
    SELECT DriverID,[JM ID] FROM Drivers WHERE [email protected] 
    SELECT [Unit ID],[External JM ID] FROM Vehicles WHERE [Unit ID] = @VehicleID 
    SELECT ImportValue FROM admin WHERE ID=1 
    SELECT Dwelltime FROM Places WHERE Placename = @place 
    SELECT [JM External ID] FROM Places WHERE Placename = @place 
END 
    UPDATE ADMIN SET ImportValue = @IMVAL WHERE ID=1 


    RETURN 

我怎么能做到这一点,并返回它作为一个记录集即

驱动ID,JM ID,组ID,外部JM ID,进口额,停留时间,JM外部ID

1 ------------ 1 -------- 1 -------- 1 ----------------- --- 1 ----------------- 1 -------------- 1

回答

3

假设他们每个只返回一行,你可以用CROSS JOIN来组合它们:

SELECT * 
FROM (SELECT [JM ID] FROM Drivers WHERE [email protected]) d CROSS JOIN 
    (SELECT [Unit ID],[External JM ID] FROM Vehicles WHERE [Unit ID] = @VehicleID) v CROSS JOIN 
    (SELECT ImportValue FROM admin WHERE ID=1) a CROSS JOIN 
    (SELECT Dwelltime FROM Places WHERE Placename = @place) p CROSS JOIN 
    (SELECT [JM External ID] FROM Places WHERE Placename = @place) p2; 

如果它们返回多个值,那么您需要解释如何将结果合并到一行中。

+1

@ user3652973。 。 。我误解了这一点。我的意思是一行(和一行)。 – 2014-12-04 13:21:19

+0

非常感谢 – user3652973 2014-12-04 13:22:40

+0

@GordonLinoff我很好奇,如果在休息时使用null的联盟会更好? – brykneval 2014-12-04 13:24:17

相关问题