Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Магия UPDATE. Не все записи изменяются  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
Вот код, сокращать не стал:
UPDATE Syn_Nefis_Outlet
    SET ClientName = rez.cosign_Cosignatory_Name,
        [Name] = rez.Cm_Outlet_Name,
        [Address] = rez.[address],
        YNP = rez.YNP,
        ChangeDate = GETDATE(),
        [Active] = 1,
        ChangeDateDK = rez.ChangeDate
    FROM
      (SELECT DISTINCT
         fp.id_pogr,
         cc.Name AS cosign_Cosignatory_Name,
         co.Name AS Cm_Outlet_Name,
         ga.[address],
         cc.YNP,
         dbo.MAX_DateTime(
           dbo.MAX_DateTime(
             dbo.MAX_DateTime(
       	       dbo.MAX_DateTime(
       	 	       dbo.MAX_DateTime(
                   dbo.MAX_DateTime(
     	               dbo.MAX_DateTime(fp.changedate,
     	                                co.ChangeDate),
     	               ga.changedate),
                   ff.changedate),
                 cc.changedate),
               fp2.changedate),
             fa.changedate),
           fag.changedate) AS ChangeDate
       FROM
         F_Pogr fp
         JOIN Cm_Outlet co
           ON co.id_cm_outlet = fp.id_cm_outlet
         JOIN Geo_Address ga
           ON ga.id_geo_address = co.id_geo_address
         JOIN F_Firm ff
           ON ff.id_firm = fp.id_firm
         JOIN cosign_Cosignatory cc
           ON cc.id_cosignatory = ff.id_cosignatory
         JOIN F_Points fp2
           ON fp2.id_pogr = fp.id_pogr
         JOIN F_Agent fa
           ON fa.id_Agent = fp2.id_agent
         JOIN F_Agents_Goods fag
           ON fag.id_group_ag = fa.id_group
         JOIN vw_ExchangeFormatNefisGoods vefng
           ON vefng.Id = fag.id_group
         WHERE
           vefng.Id_ExchangeFormatType IN (1,2)) rez
    WHERE
      Syn_Nefis_Outlet.Id_Outlet = rez.id_pogr AND
      Syn_Nefis_Outlet.ChangeDateDK <> rez.ChangeDate AND
      rez.id_pogr = 129782362

Здесь Syn_Nefis_Outlet - это синоним на таблицу в другой БД на том же сервере.
Поле ChangeDate во всех таблицах NOT NULL.
Вот конкретно для этой записи Update не выполняется вот тут: ChangeDateDK = rez.ChangeDate
Пишет (1 row(s) affected) т.е. он проходит, но поле не апдейтит. Селект запись выбирает.
Если преобразовать в SELECT он показывает, что все поля совпадают кроме ChangeDateDK, rez.ChangeDate
4 апр 13, 12:08    [14134918]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
Glory
Member

Откуда:
Сообщений: 104751
X-Cite
Вот конкретно для этой записи Update не выполняется вот тут: ChangeDateDK = rez.ChangeDate
Пишет (1 row(s) affected) т.е. он проходит, но поле не апдейтит.

Триггер срабатывает ?
4 апр 13, 12:10    [14134938]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
Glory,

Ммм.. таблица Syn_Nefis_Outlet ходит по репликации и там есть только репликационные триггера ins, upd, del
4 апр 13, 12:14    [14134970]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
И если запустить репликацию, то она забирает эту запись, т.к. считает что она изменилась.
4 апр 13, 12:21    [14135016]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
Значение полей такое:
Syn_Nefis_Outlet.ChangeDateDK = '2013-04-03 14:34:44.460'
rez.ChangeDate = '2013-03-06 15:45:54.230'
4 апр 13, 12:22    [14135023]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Добавьте предложение output inserted.* и все увидите.
4 апр 13, 12:22    [14135025]     Ответить | Цитировать Сообщить модератору
 Re: Магия UPDATE. Не все записи изменяются  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
invm,

Спасибо, потом рассмотрю что это. Не знал, думаю это мне в будущем поможет раскапывать проблему намного быстрее.
А сейчас раскопал вот это.
SELECT DISTINCT
         dbo.MAX_DateTime(
           dbo.MAX_DateTime(
             dbo.MAX_DateTime(
       	       dbo.MAX_DateTime(
       	 	       dbo.MAX_DateTime(
                   dbo.MAX_DateTime(
     	               dbo.MAX_DateTime(fp.changedate,
     	                                co.ChangeDate),
     	               ga.changedate),
                   ff.changedate),
                 cc.changedate),
               fp2.changedate),
             fa.changedate),
           fag.changedate) AS ChangeDate
       FROM
         F_Pogr fp
         JOIN Cm_Outlet co
           ON co.id_cm_outlet = fp.id_cm_outlet
         JOIN Geo_Address ga
           ON ga.id_geo_address = co.id_geo_address
         JOIN F_Firm ff
           ON ff.id_firm = fp.id_firm
         JOIN cosign_Cosignatory cc
           ON cc.id_cosignatory = ff.id_cosignatory
         JOIN F_Points fp2
           ON fp2.id_pogr = fp.id_pogr
         JOIN F_Agent fa
           ON fa.id_Agent = fp2.id_agent
         JOIN F_Agents_Goods fag
           ON fag.id_group_ag = fa.id_group
         JOIN vw_ExchangeFormatNefisGoods vefng
           ON vefng.Id = fag.id_group
WHERE
  fp.id_pogr = 129782362 AND
  vefng.Id_ExchangeFormatType IN (1,2)

Возвращает 2 записи.
'2013-03-06 15:45:54.230'
'2013-04-03 14:34:44.460'

Вопрос закрыт
4 апр 13, 12:37    [14135161]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить