我想知道CTE中的数据是否是静态的(当它从创建的原始表中进行更改时它是否保持不变) - 我认为答案是肯定的,但我想确定。例如:
DECLARE @TSCourseID as INT = 123456789;
WITH CTE as
(
SELECT
TSRegistrants.TSRegistrantID
,TSRegistrants.Name
,TSRegistrants.Email
,TSRegistrants.PhoneNumber
FROM TSRegCourseDetail
JOIN TSRegistrants
ON TSRegCourseDetail.TSRegistrantID = TSRegistrants.TSRegistrantID
WHERE TSRegCourseDetail.TSCourseID = @TSCourseID
AND TSRegistrants.Name in ('User List')
)
UPDATE TSRegCourseDetail
SET TSCourseID = 987654321
WHERE TSRegistrantID in (select TSRegistrantID from CTE)
1)这会改变CTE中的数据吗?如果是这样,此查询将清空它;我希望它没有
2)另外,从CTE工作中选择TSRegistrantID进行更新/设置会更好吗?
我不是程序员,暂时还没戴上帽子>。<
谢谢!
答案 0 :(得分:2)
在UPDATE发生之前评估CTE,所以就你的意思而言,没有数据不会改变。
此外,CTE只能与一个select语句(或更新或插入)一起使用。如果您希望它可用于多个语句,则需要临时表或表变量。
答案 1 :(得分:0)
根本不需要使用CTE:
DECLARE @TSCourseID AS INT = 123456789
UPDATE cd
SET cd.TSCourseID = 987654321
FROM TSCourseDetail cd
INNER JOIN TSRegistrants r ON cd.TSRegistrantID = r.TSRegistrantID
WHERE cd.TSRegistrantID = @TSCourseID
AND TSRegistrants.Name IN ( 'User List' )