在一条语句中更新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 calendardatebox和tbl\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正常工作。我也不确定是否有可能在一条语句中更新多个表,但这是我至少可以马上发现的一件事。我在集合中提供完全限定的别名,因为它不会从中提取别名。请看我的答案,我经常这样做,我数不清。但是,从未尝试更新多个表,可能无法正常工作