我正在尝试更新三个不同表中的字段,但是我遇到了一些错误:
UPDATE
a, b, c
SET
a.Locked = 0,
b.Locked = 0,
c.Locked = 0,
a.LockedByUsername = 'zolomon',
b.LockedByUsername = 'zolomon',
c.LockedByUsername = 'zolomon',
a.LockedAt = CURRENT_TIMESTAMP,
b.LockedAt = CURRENT_TIMESTAMP,
c.LockedAt = CURRENT_TIMESTAMP
FROM
TableA AS a
INNER JOIN TableB as b ON n.Objid = o.Objid
INNER JOIN TableC as c ON n.Namnid = e.Namnid
WHERE
a.Namn1 = 'FirstName LastName' AND b.objektkod='SomeIdentifier'
错误:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.
答案 0 :(得分:25)
您无法在单个update
查询中更新多个表中的字段。你得到的错误是因为这是不允许的:
update a, b, c
由于您只能根据update
命令更新一个表。
答案 1 :(得分:4)
正如其他答案所指出的,在SQL中UPDATE
只更新一个表。这通常足以满足大多数实际需求。如果您想同时更新多个表 ,您可以将更新放在一个事务中,效果通常是相同的。
如果您担心获取不同的时间戳(对于您的字段lockedAt
),请首先查看您的数据库文档,以检查您的CURRENT_TIMESTAMP
函数是否指的是事务的开始时间(例如{{3 }})。
答案 2 :(得分:3)
您无法在一个语句中更新多个表。一个选项是使用存储过程
答案 3 :(得分:-1)
我们可以像这样加入
来更新它<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DM[@CT='REJECT']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>