使用CTE更新SQL语句
我有一个常用的表表达式,试图将其用作update语句。CTE的唯一原因是我可以使用where子句按CredCount进行筛选。我想使用where子句只更新与本例中CredCount为2匹配的记录。但是,我在查询的更新部分遇到了问题 成员身份证 资格证书 CredCount 成员数目 1. 心肺复苏术 2. 0 2. 心肺复苏术 2. 0 3. 心肺复苏术 2. 0 试试这个:使用CTE更新SQL语句,sql,sql-server,tsql,common-table-expression,Sql,Sql Server,Tsql,Common Table Expression,我有一个常用的表表达式,试图将其用作update语句。CTE的唯一原因是我可以使用where子句按CredCount进行筛选。我想使用where子句只更新与本例中CredCount为2匹配的记录。但是,我在查询的更新部分遇到了问题 成员身份证 资格证书 CredCount 成员数目 1. 心肺复苏术 2. 0 2. 心肺复苏术 2. 0 3. 心肺复苏术 2. 0 试试这个: .... CTE2 AS ( SELECT members_id FROM members ), CTE3
....
CTE2 AS (
SELECT members_id
FROM members
), CTE3 AS (
SELECT CTE.members_id, CTE.Credentials, CTE.CredCount,
CTE.members_amountdue,
(CTE.members_amountdue + 25) as NewPriceTotal
FROM CTE JOIN CTE2 ON CTE.members_id = CTE2.members_id
WHERE CTE.CredCount = 2)
UPDATE CTE3
SET members_amountdue = NewPriceTotal
该更新是一个单独的声明,不知道您对CTEs所做的任何事情。CTE类似于临时的内联视图,不会持久化。也许您应该将输出转储到#temp表,并更改UPDATE语句以加入到#temp表。感谢您的建议,但是这会遇到错误“Msg 4403,级别16,状态1,第1行无法更新视图或函数“CTE3”,因为它包含聚合、DISTINCT或GROUP BY子句、PIVOT或UNPIVOT运算符。”@这是因为顶级CTE中使用了
DISTINCT
关键字。更新将传播到数据库中的实际表。使用DISTINCT
使引擎很难确定要更新的确切行。如果您没有使用DISTINCT
,结果会是什么?谢谢Giorgos-我感谢您的帮助。你的建议是对的。