gpt4 book ai didi

sql - 使用 CTE 时执行 CRUD 操作时对象名称无效 'Table'

转载 作者:行者123 更新时间:2023-12-04 14:07:25 25 4
gpt4 key购买 nike

您好,我目前正在创建 My SP,它根据我的 select 语句给出的结果插入和检测记录。

这是我的示例代码:

DECLARE @PickListBatchName varchar(200),
@PartNumber varchar(50),
@QTY int;

SET @PickListBatchName='TEST1';
SET @PartNumber='PN1';
SET @QTY=1;


--STEP 1 Add Result to TempTable
With SN as
(
SELECT TOP (@QTY)
pb.PickListBatchId
,pt.PickListTRANId
,pt.SerialNumber
,pt.Createdby
,pt.CreatedDT
FROM PickListTRAN pt
LEFT JOIN PickListBatchDetail pdb ON pdb.PickListBatchDetailId=pt.PickListBatchDetailId
LEFT JOIN PickListBatch pb ON pdb.PickListBatchId=pb.PickListBatchId
where pb.PickListBatchName=@PickListBatchName AND pdb.PartNumber=@PartNumber
)


--STEP 2: INSERT SN TO PicklistTranCancel
INSERT INTO PickListTRANCancel
(
PickListBatchId
,SerialNumber
,CreatedBy
,CreatedDT
)
(SELECT
PickListBatchId,
SerialNumber,
Createdby,
CreatedDT
FROM SN);

--STEP 3: DELETE Records on PicklistTran

DELETE FROM PicklistTran where picklistTranId IN (SELECT PickListTRANId FROM SN)

结果:

(1 row(s) affected)
Msg 208, Level 16, State 1, Line 49
Invalid object name 'SN'. --error on delete statement

在第 3 步,delete 语句无法读取 SN 表。也许我在那部分遗漏了一些东西。

在此致谢

最佳答案

在您的代码中,CTE 只能在插入语句之前访问。如果您需要访问 CTE 表,请尝试将 CTE 数据填充到 @TempTable 中,然后在您的删除语句中访问它。您可以修改代码以将值存储到临时表中

 INSERT INTO PickListTRANCancel

(
PickListBatchId
,SerialNumber
,CreatedBy
,CreatedDT
)
Output Inserted.PickListBatchId,Inserted.SerialNumber,Inserted.CreatedBy,
Inserted.CreatedDT into @TempTable
(SELECT
PickListBatchId,
SerialNumber,
Createdby,
CreatedDT
FROM SN);

DELETE FROM PicklistTran where picklistTranId IN
(SELECT PickListTRANId FROM @TempTable)

我尚未验证代码,但这样您就可以构建查询。

关于sql - 使用 CTE 时执行 CRUD 操作时对象名称无效 'Table',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com