Обновление удаленных таблиц с использованием связанного сервера - PullRequest
0 голосов
/ 09 июля 2011

Я хочу обновить удаленную таблицу следующим кодом, но я сталкиваюсь с этой ошибкой:

`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 Ответ

1 голос
/ 09 июля 2011

Ошибка в предложении 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
    ...

Кроме того, ваша временная таблица имеет 3 столбца в JOIN, но определяется только с 2. t_bazresiFE отсутствует. Так что это снова будет ошибка ...

...