我有一个这样的存储过程:
ALTER procedure [dbo].[IBS_PodiumSummeryCount]
@locid integer = null
as
begin
SET NOCOUNT ON;
SELECT
sum(status_receved) as Receved,
sum(status_parked) as Parked,
sum(status_requested) as Requested,
sum(status_requestedinprocess) as Requestinprocess
FROM
(SELECT
CASE WHEN (status = 0 ) THEN 1 ELSE 0 END AS status_receved,
CASE WHEN (status = 2) THEN 1 ELSE 0 END AS status_parked,
CASE WHEN (status = 3) THEN 1 ELSE 0 END AS status_requested,
CASE WHEN (status = 4) THEN 1 ELSE 0 END AS status_requestedinprocess
FROM
transaction_tbl
WHERE
locid = @locid AND dtime >= getdate()-1 AND status IN (0,2,3,4)) a;
SELECT
l1.StartTime, CONVERT(VARCHAR, GETDATE(), 108) AS Time
FROM
Location_tbl l1
WHERE
l1.Locid = @locid
END
我还有一个这样的存储过程:
select dbo.podiumsummerytime(
convert(decimal(10,1),
avg(convert(numeric(18,2), datediff(ss, t.dtime, t.PAICdate ))))
) as Avgparkingtime,
dbo.podiumsummerytime(
convert(decimal(10,1),
avg(convert(numeric(18,2), datediff(ss, t.Paydate, t.DelDate ))))
) as AvgDelivarytime,
dbo.podiumsummerytime(
convert(decimal(10,1),
avg(convert(numeric(18,2), datediff(ss, t.dtime, t.DelDate ))))
) as Avgstaytime
from (select top 30 * from transaction_tbl where locid=@locid and dtime >= getdate()-2 order by transactID desc ) t
end
我尝试将这两个存储过程写在一个带有union的文件中,但我收到的错误是这样的:
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式。
我正在使用SQL Server 2008,如何将这两个存储过程合并到一个存储过程...
答案 0 :(得分:2)
正如错误所述,UNION是一个特定的关键字用于获取两组结果的行。如果行不同,则它们不能与UNION连接。
没有什么可以阻止你将两个查询放在一个存储过程中,proc将返回两个结果集。
例如:
ALTER procedure [dbo].[IBS_PodiumSummeryCount]
@locid integer = null
AS
BEGIN
SELECT * FROM Customers WHERE Location = @Locid;
SELECT * FROM Suppliers WHERE Location = @Locid;
END
将在单独的结果集中返回两个查询的结果。