我有一个返回DISTINCT ID的CTE。我想对每个返回的Id执行一个标量函数。如何对SQL Server CTE的结果执行存储过程
WITH cte (reqID) as
(SELECT DISTINCT pol.ReqID FROM
LOG_PackingListItems pli
JOIN
v_PO_LN pol on pol.PO_ID = pli.PoId
WHERE
pli.PackingListHeaderID = 1)
EXEC dbo.spUpdateLOG_ReqCompleteCheck reqID -- Error "Incorrect Syntax near EXEC"
EXEC行是我想做的工作,但我得到一个语法错误。不知道我想要做什么是可能的,或者如果我确实有语法错误。有任何想法吗?
编辑: 我,因为我现在用的是表值参数所建议增加对存储过程的代码realnumber3012
编辑: 我已经改变了我的CTE代码,以便它根据实际编号建议填充表格类型。执行spUpdateLOG_ReqCompleteCheck时,我现在遇到错误“子查询返回多个值。”
DECLARE @ReqIdTVP as ReqIdType;
DELETE FROM @ReqIDTVP;
with cte (reqID) as
(select distinct pol.ReqID from
LOG_PackingListItems pli
join
v_PO_LN pol on pol.PO_ID = pli.PoId
where
pli.PackingListHeaderID = @PackingListHeaderID)
INSERT INTO @ReqIdTVP
SELECT * FROM cte
EXEC dbo.spUpdateLOG_ReqCompleteCheck @ReqIdTVP
存储过程的代码:
Alter PROCEDURE spUpdateLOG_ReqCompleteCheck
(@ReqIdTVP ReqIdType READONLY)
AS
BEGIN
DECLARE @TotalOrd int
DECLARE @TotalRx int
DECLARE @ReqID char(8)
SET @ReqID = (SELECT ReqID FROM @ReqIdTVP)
SET @TotalOrd = (SELECT ISNULL(SUM(ORD_QTY),0)
FROM dbo.v_PoLnNonFreight l
WHERE l.ReqID = @reqID)
SET @TotalRx = (SELECT ISNULL(SUM(TotalRxSite),0)
FROM dbo.v_PoLnNonFreight l
WHERE l.ReqID = @reqID)
IF @TotalRx >= @TotalOrd
BEGIN
DECLARE @curDate datetime
SET @CurDate = ISNULL(@CurDate,GetDate())
SET NOCOUNT ON;
UPDATE LOG_ReqHeader
SET
ReqCompleteDate = @curDate,
ReqStatus = 'Complete'
WHERE ReqID = @ReqID
END
END
版本的SQL SERVER? – realnumber3012 2013-04-25 04:10:46
对不起,没有想过需要提供,2008 R2 – 2013-04-25 15:39:34
你可以改变标题吗?这非常具有误导性。您不会针对您尝试调用每个行的存储过程的结果发出标量函数。这是一个巨大的差异。如果您想要应用标量函数,那么您将使用CROSS APPLY运算符...... – 2013-04-25 21:45:54