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

发布于 2024-11-19 17:25:07 字数 1115 浏览 2 评论 0原文

我想使用以下代码更新远程表,但遇到此错误:

`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

I wanna update remote table with following code but I encounter this error:

`Msg 208, Level 16, State 1, Line 12
Invalid object name 'f1'.`

code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月苍老的讽刺 2024-11-26 17:25:07

错误出在 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。于是又会报错...

The error is in the SET clause. You can't specify aliases in the column assign. There is no need because you've already told SQL Server what table in the UPDATE clause

Should be:

update  f1 
set
   modate_mogharar = tbl_ghireHadese.modate_mogharar,
   t_pm_mogharar = tbl_ghireHadese.t_pm_mogharar
from 
....

Note: SQL Server doesn't always give the correct line number for errors

Edit: use 4 part object names as normal tables

...

FROM
    lnkworkersystem.Bazresi_Kar.dbo.Tbl_ghireHadese
    inner join
    @temp temp on temp.co_kargah=f1.co_kargah
    ...

Also, your temp table has 3 columns in the JOIN but is only defined with 2. t_bazresiFE is missing. So it will error again...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文