使用链接服务器更新远程表

时间:2011-07-09 10:13:32

标签: sql-server-2000 linked-server

我想用以下代码更新远程表,但我遇到了这个错误:

`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

1 个答案:

答案 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缺失。所以它会再次出错...