[英]can we use two different queries with CTE table in sql server
我想將 CTE 表用於兩個查詢。 當我嘗試如下所示時,它給出了一個錯誤
無效的對象名稱“cte”。
;
WITH cte
AS (
SELECT ROW_NUMBER() OVER (
PARTITION BY hours ORDER BY hours
) AS rno
,personnum
,DATE
,hours
FROM datatable
WHERE personnum = @personnum
AND hours = @minhrs
)
INSERT INTO logdata
SELECT PERSONNUM
,DATE
,HOURS
FROM cte
WHERE rno = 1
UPDATE cte
SET hours = hours + 0.01
WHERE rno = 1
已執行插入語句,但系統在更新語句中引發錯誤。
您不能在多個語句中使用 CTE,它們的范圍在語句級別。 您可以做的是使用OUTPUT
子句來捕獲更新的行並將它們插入到您的日志表中:
WITH cte AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY hours ORDER BY hours) AS rno,
personnum,
Date,
hours
FROM Datatable
WHERE personnum = @personnum
AND Hours = @minhrs
)
UPDATE cte
SET hours = hours + 0.01
OUTPUT deleted.personnum, deleted.Date, deleted.hours INTO logdata
WHERE rno=1;
如果您的日志表有外鍵引用,那么您可能需要在插入結果之前將結果存儲到臨時表中:
-- I have had to guess at types here, change them as necessary
DECLARE @tmpLog TABLE (PersonNum INT, Date DATE, Hours INT);
WITH cte AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY hours ORDER BY hours) AS rno,
personnum,
DATE,
hours
FROM Datatable
WHERE personnum = @personnum
AND Hours = @minhrs
)
UPDATE cte
SET hours = hours + 0.01
OUTPUT deleted.personnum, deleted.DATE, deleted.hours INTO @tmpLog
WHERE rno=1;
INSERT LogData (personnum, Date, hours)
SELECT personnum, Date, hours
FROM @tmpLog;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.