我想用以下代码更新远程表,但我遇到了这个错误:
`Msg 208, Level 16, State 1, Line 12
Invalid object name 'f1'.`
代码:
declare @temp table
(
co_kargah bigint,
code_ostan nvarchar(10)
)
insert into @temp
select co_kargah,code_ostan
from Tbl_ghireHadese_Temp
where InsUpKey=2
update f1 /* Error location*/
set
f1.modate_mogharar=tbl_ghireHadese.modate_mogharar,
f1.t_pm_mogharar=tbl_ghireHadese.t_pm_mogharar
from openquery([lnkworkersystem],'select * from Bazresi_Kar.dbo.Tbl_ghireHadese') f1
inner join @temp temp
on temp.co_kargah=f1.co_kargah
and temp.code_ostan=f1.code_ostan
and temp.t_bazresiFE=f1.t_bazresiFE
inner join tbl_ghireHadese
on temp.co_kargah=tbl_ghireHadese.co_kargah
and temp.code_ostan=tbl_ghireHadese.code_ostan
and temp.t_bazresiFE=tbl_ghireHadese.t_bazresiFE
答案 0 :(得分:1)
错误发生在SET子句中。您无法在列分配中指定别名。没有必要,因为您已经告诉SQL Server UPDATE子句中的哪个表
应该是:
update f1
set
modate_mogharar = tbl_ghireHadese.modate_mogharar,
t_pm_mogharar = tbl_ghireHadese.t_pm_mogharar
from
....
注意:SQL Server并不总是为错误提供正确的行号
编辑:使用4部分对象名称作为普通表格
...
FROM
lnkworkersystem.Bazresi_Kar.dbo.Tbl_ghireHadese
inner join
@temp temp on temp.co_kargah=f1.co_kargah
...
此外,您的临时表在JOIN中有3列,但仅定义为2. t_bazresiFE
缺失。所以它会再次出错...