[英]How can I call teo columns from a tablar function in a SQL Server stored procedure at a same time
這是我的存儲過程:
ALTER PROCEDURE [dbo].[PaymentStatusProviderDetailView]
(@POId INT ,
@ProviderId INT ,
@PrrId INT)
AS
BEGIN
SELECT
SDID,
dbo.GetServiceDetailString(SDID) AS ServiceName,
POID,
AmountPaid, AmountHeld,
ProviderName,
(SELECT ReimbursementAmount
FROM dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId)) AS ReimbursementAmount,
(SELECT ServiceMonth
FROM dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId)) AS ServiceMonth
FROM
(SELECT
SD.Id AS SDID, PO.Id AS POID,
SUM(PD.PaymentAmount) AS AmountPaid,
PH.HoldAmount AS AmountHeld,
PROV.ContractorName AS ProviderName
FROM
[dbo].[PaymentDetail] PD
JOIN
PurchaseOrder PO ON PO.Id = PD.PO_Id
JOIN
fBusinessUnit BU ON BU.id = PD.BU_Id
LEFT JOIN
Reimbursement_EBSUtilization REU ON REU.Id = PD.REU_Id
LEFT JOIN
Reimbursement_CDSUtilization RCU ON RCU.Id = PD.RCU_Id
LEFT JOIN
PaymentHold PH ON PH.PO_Id = PO.Id
AND (PH.RCU_Id = PD.RCU_Id OR PH.REU_Id = PD.REU_Id)
LEFT JOIN
ProviderReimbursementRequest PRR ON (PRR.Id = REU.PRR_Id OR PRR.Id = RCU.PRR_Id)
LEFT JOIN
fContractor PROV ON PROV.Id = PRR.Contractor_Id
LEFT JOIN
CDSUtilization CDS ON CDS.Id = RCU.CDSU_Id
LEFT JOIN
fServiceDetail SD ON SD.Id = REU.SD_Id OR SD.Id = CDS.ServiceDetail_Id
WHERE
Po.Id = @POId
AND PRR.Contractor_Id = @ProviderId
AND PRR.Id = @PrrId
GROUP BY
SD.Id, PO.Id, PH.HoldAmount, PROV.ContractorName
UNION
SELECT
SD.Id AS SDID, PO.Id AS POID,
NULL,
SUM(PH.HoldAmount) AS AmountHeld,
PROV.ContractorName AS ProviderName
FROM
PurchaseOrder PO
JOIN
PaymentHold PH ON PH.PO_Id = PO.Id
LEFT JOIN
Reimbursement_EBSUtilization REU ON REU.Id = PH.REU_Id
LEFT JOIN
Reimbursement_CDSUtilization RCU ON RCU.Id = PH.RCU_Id
LEFT JOIN
CDSUtilization CDS ON CDS.Id = RCU.CDSU_Id
JOIN
ProviderReimbursementRequest PRR ON PRR.Id = REU.PRR_Id OR RCU.PRR_Id = PRR.Id
JOIN
fContractor PROV ON PROV.Id = PRR.Contractor_Id
JOIN
fServiceDetail SD ON SD.Id = REU.SD_Id OR SD.Id = CDS.ServiceDetail_Id
WHERE
Po.Id = @POId
AND PRR.Contractor_Id = @ProviderId
AND PRR.Id = @PrrId
AND NOT EXISTS (SELECT 1
FROM PaymentDetail PD
WHERE PH.PO_Id = PD.PO_Id
AND (PH.RCU_Id = PD.RCU_Id OR PH.REU_Id = PD.REU_Id))
GROUP BY
SD.Id, PO.Id, PROV.ContractorName) DT
END
在上面的存儲過程中,在特定的代碼中,我為兩列兩次調用了相同的表格函數
(SELECT ReimbursementAmount
FROM dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId)) AS ReimbursementAmount,
(SELECT ServiceMonth
FROM dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId)) AS ServiceMonth
如何在同一存儲過程中僅調用一次以上函數並同時獲得兩個列名?
像下面這樣說
(SELECT ReimbursementAmount, ServiceMonth
FROM dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId)) AS ReimbursementAmount and ServiceMonth
有人可以幫我嗎?
這樣行嗎?
SELECT .......
........
RI.ReimbursementAmount,
RI.ServiceMonth,
...
FROM
.....
....
CROSS APPLY dbo.GetReimbursementBilledAmounts(@POId, SDID, @ProviderId, @PrrId) RI
WHERE
Po.Id = @POId
AND PRR.Contractor_Id = @ProviderId
AND PRR.Id = @PrrId
....
..
這看起來像sql server中的限制。 我們應該只使用列函數來檢索或顯示單個列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.