DISTINCT ID を返す CTE があります。返された ID ごとにスカラー関数を実行したいと考えています。
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 コードを変更したので、実数が示唆するように Table-Type が設定されます。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
Sproc コード :
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