在一条语句中更新2个表(MS SQL)

在一条语句中更新2个表(MS SQL),sql,sql-update,inner-join,Sql,Sql Update,Inner Join,可能重复: 我有一个更新声明。它更新一个字段,但在另一个表上进行内部联接,以完成where子句。我正在使用MS SQL 我现在尝试更新联接表上的字段,但似乎无法更新。我已经读到,您一次只能更新一个表。这是真的吗?有什么办法可以让我绕过这件事吗 这是我的声明 update tbl_calendardatebox set tbl_calendardatebox.HeaderBgColour = @value, tbl_calendarobjects.Saved = '0' from tbl_c

可能重复:

我有一个更新声明。它更新一个字段,但在另一个表上进行内部联接,以完成where子句。我正在使用MS SQL

我现在尝试更新联接表上的字段,但似乎无法更新。我已经读到,您一次只能更新一个表。这是真的吗?有什么办法可以让我绕过这件事吗

这是我的声明

update tbl_calendardatebox
set 
tbl_calendardatebox.HeaderBgColour = @value,
tbl_calendarobjects.Saved = '0'

from tbl_calendardatebox db
inner join tbl_calendarobjects o on
db.ObjectId = o.Id

where o.PageId = @page
and o.GroupField = @group and o.GroupField <> '-1'
and o.Visible = '1'
and o.CanUserEdit = '1'
and db.HeaderBgColour <> @value
更新tbl\u日历日期框
设置
tbl_calendardatebox.HeaderBgColour=@value,
tbl_calendarobjects.Saved='0'
来自tbl_日历日期框数据库
内部连接tbl_日历对象打开
db.ObjectId=o.Id
其中o.PageId=@page
和o.GroupField=@group和o.GroupField'-1'
和o.Visible='1'
和o.CanUserEdit='1'
和db.HeaderBgColour@value
因此,这两个表是tbl\u calendardateboxtbl\u calendarobjects。我在tbl_calendarobjects.Saved='0'上收到错误消息-无法绑定多部分标识符“tbl_calendarobjects.Saved”

任何帮助都将不胜感激。

希望此示例(摘自)能够帮助您:

UPDATE a 
INNER JOIN b USING (id) 
SET a.firstname='Pekka', a.lastname='Kuronen', 
b.companyname='Suomi Oy',companyaddress='Mannerheimtie 123, Helsinki Suomi' 
WHERE a.id=1; 
您的查询(抱歉,我无法测试)可能是:

UPDATE tbl_calendardatebox cdb
  INNER JOIN tbl_calendarobjects co
    ON cdb.ObjectId = co.Id
SET cdb.HeaderBgColour = @value
  , co.Saved = '0'
WHERE co.PageId = @page
AND co.GroupField = @group 
AND co.GroupField <> '-1'
AND co.Visible = '1'
AND co.CanUserEdit = '1'
AND cdb.HeaderBgColour <> @value
更新tbl\u日历日期框cdb
内部连接tbl_calendarobjects公司
在cdb.ObjectId=co.Id上
设置cdb.HeaderBgColour=@value
,co.已保存='0'
其中co.PageId=@page
和co.GroupField=@group
和co.GroupField'-1'
和co.可见='1'
和co.CanUserEdit='1'
和cdb.HeaderBgColour@value
希望此示例(摘自)能帮助您:

UPDATE a 
INNER JOIN b USING (id) 
SET a.firstname='Pekka', a.lastname='Kuronen', 
b.companyname='Suomi Oy',companyaddress='Mannerheimtie 123, Helsinki Suomi' 
WHERE a.id=1; 
您的查询(抱歉,我无法测试)可能是:

UPDATE tbl_calendardatebox cdb
  INNER JOIN tbl_calendarobjects co
    ON cdb.ObjectId = co.Id
SET cdb.HeaderBgColour = @value
  , co.Saved = '0'
WHERE co.PageId = @page
AND co.GroupField = @group 
AND co.GroupField <> '-1'
AND co.Visible = '1'
AND co.CanUserEdit = '1'
AND cdb.HeaderBgColour <> @value
更新tbl\u日历日期框cdb
内部连接tbl_calendarobjects公司
在cdb.ObjectId=co.Id上
设置cdb.HeaderBgColour=@value
,co.已保存='0'
其中co.PageId=@page
和co.GroupField=@group
和co.GroupField'-1'
和co.可见='1'
和co.CanUserEdit='1'
和cdb.HeaderBgColour@value

首先进行语法修复,也可能解决问题,未经测试

update db
set 
db.HeaderBgColour = @value,
o.Saved = '0'

from tbl_calendardatebox db
inner join tbl_calendarobjects o on
db.ObjectId = o.Id

where o.PageId = @page
and o.GroupField = @group and o.GroupField <> '-1'
and o.Visible = '1'
and o.CanUserEdit = '1'
and db.HeaderBgColour <> @value
更新数据库
设置
db.HeaderBgColour=@value,
o、 已保存='0'
来自tbl_日历日期框数据库
内部连接tbl_日历对象打开
db.ObjectId=o.Id
其中o.PageId=@page
和o.GroupField=@group和o.GroupField'-1'
和o.Visible='1'
和o.CanUserEdit='1'
和db.HeaderBgColour@value
在stackoverflow上找到实际答案:


遗憾的是,这是不可能的。

首先进行语法修复,也可能解决问题,未经测试

update db
set 
db.HeaderBgColour = @value,
o.Saved = '0'

from tbl_calendardatebox db
inner join tbl_calendarobjects o on
db.ObjectId = o.Id

where o.PageId = @page
and o.GroupField = @group and o.GroupField <> '-1'
and o.Visible = '1'
and o.CanUserEdit = '1'
and db.HeaderBgColour <> @value
更新数据库
设置
db.HeaderBgColour=@value,
o、 已保存='0'
来自tbl_日历日期框数据库
内部连接tbl_日历对象打开
db.ObjectId=o.Id
其中o.PageId=@page
和o.GroupField=@group和o.GroupField'-1'
和o.Visible='1'
和o.CanUserEdit='1'
和db.HeaderBgColour@value
在stackoverflow上找到实际答案:


很遗憾,这是不可能的。

不可能同时更新多个表。以下是摘要,从中可以清楚地看出

{}表示必填字段

[]表示可选字段

[…n]表示0或更多

UPDATE 
        { 
         table_name WITH ( < table_hint_limited > [ ...n ] ) 
         | view_name 
         | rowset_function_limited 
        } 
        SET 
        { column_name = { expression | DEFAULT | NULL } 
        | @variable = expression 
        | @variable = column = expression } [ ,...n ] 

    { { [ FROM { < table_source > } [ ,...n ] ] 

        [ WHERE 
            < search_condition > ] } 
        | 
        [ WHERE CURRENT OF 
        { { [ GLOBAL ] cursor_name } | cursor_variable_name } 
        ] } 
        [ OPTION ( < query_hint > [ ,...n ] ) ] 
更新
{ 
带有([…n])的表名
|视图名称
|行集功能有限公司
} 
设置
{column_name={expression | DEFAULT | NULL}
|@variable=表达式
|@variable=column=expression}[,…n]
{{[来自{}[,…n]]
[哪里
]}
| 
[其中
{{[GLOBAL]cursor_name}{124; cursor_variable_name}
] } 
[选项([,…n])]
以下部分不能包含任何联接。“{}”表示可以包含视图名或表名但不包含联接的必填字段

{ 
 table_name WITH ( < table_hint_limited > [ ...n ] ) 
 | view_name 
 | rowset_function_limited 
} 
{
带有([…n])的表名
|视图名称
|行集功能有限公司
} 

不可能同时更新多个表。以下是摘要,从中可以清楚地看出

{}表示必填字段

[]表示可选字段

[…n]表示0或更多

UPDATE 
        { 
         table_name WITH ( < table_hint_limited > [ ...n ] ) 
         | view_name 
         | rowset_function_limited 
        } 
        SET 
        { column_name = { expression | DEFAULT | NULL } 
        | @variable = expression 
        | @variable = column = expression } [ ,...n ] 

    { { [ FROM { < table_source > } [ ,...n ] ] 

        [ WHERE 
            < search_condition > ] } 
        | 
        [ WHERE CURRENT OF 
        { { [ GLOBAL ] cursor_name } | cursor_variable_name } 
        ] } 
        [ OPTION ( < query_hint > [ ,...n ] ) ] 
更新
{ 
带有([…n])的表名
|视图名称
|行集功能有限公司
} 
设置
{column_name={expression | DEFAULT | NULL}
|@variable=表达式
|@variable=column=expression}[,…n]
{{[来自{}[,…n]]
[哪里
]}
| 
[其中
{{[GLOBAL]cursor_name}{124; cursor_variable_name}
] } 
[选项([,…n])]
以下部分不能包含任何联接。“{}”表示可以包含视图名或表名但不包含联接的必填字段

{ 
 table_name WITH ( < table_hint_limited > [ ...n ] ) 
 | view_name 
 | rowset_function_limited 
} 
{
带有([…n])的表名
|视图名称
|行集功能有限公司
} 

正如Shantanu所说,不可能更新多个表。 无论如何,若你们的环境允许,你们可以走这条路。
它是安全和原子的。记住,在捕获错误时,总是回滚。

就像Shantanu所说的,不可能更新多个表。 无论如何,若你们的环境允许,你们可以走这条路。
它是安全和原子的。请记住,在捕获错误时,始终回滚。

您为表提供了别名,但不使用它们。要么你在这里发帖时弄坏了什么东西,要么你永远无法让systax正常工作。我也不确定是否有可能在一条语句中更新多个表,但这是我至少可以马上发现的一件事。我在集合中提供完全限定的别名,因为它不会从中提取别名。请看我的答案,我经常这样做,我数不清。但是,从未尝试更新多个表,可能无法正常工作