Изменение этой вставки с присоединением к обновлению - PullRequest
0 голосов
/ 19 июля 2011

Нам нужно прекратить заполнять таблицу записями и просто регулярно обновлять 1 строку для каждой записи.Нет необходимости вести какую-либо историю.Я работал с этим оператором UPDATE, но не могу получить правильный синтаксис, чтобы учесть также JOIN.

Может ли кто-нибудь помочь сделать этот INSERT INTO простым ОБНОВЛЕНИЕМ?Затем я добавлю IF EXISTS (выполнить UPDATE) ELSE (выполнить вставку), как только выясню синтаксис оператора UPDATE.Я использую отличный скрипт от sqlfool.com, но сделал несколько модификаций и надеюсь, что это последний.Спасибо !!

Insert Into [testCentral].[ReplMonitor].[dbo].[replMonitor]
(
      monitorDate
    , publicationName
    , publicationDB
    , iteration
    , tracer_id
    , distributor_latency
    , subscriber
    , subscriber_db
    , Loc_ID
    , subscriber_latency
    , overall_latency
)
Select 
      @currentDateTime
    , @publicationToTest
    , @publicationDB
    , iteration
    , tracer_id
    , IsNull(distributor_latency, 0)
    , subscriber
    , subscriber_db
    , b.LOC_ID
    , IsNull(subscriber_latency, 0)
    , IsNull(overall_latency, 
        IsNull(distributor_latency, 0) + IsNull(subscriber_latency, 0))
From @tokenResults AS a
JOIN LotteryRetail.dbo.casino b
ON 1 = 1 ;

Ответы [ 2 ]

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

Вы должны рассмотреть возможность использования MERGE для этого.Но вот решение с вашими данными.К сожалению, я не знаю, как вы хотите присоединиться к вашим столам.Так что вам нужно заполнить это самостоятельно.Вместе с колонками, которые должны быть очевидны.

update c
set monitorDate = @currentDateTime,
    publicationName = @publicationToTest
-- fill out the rest of your columns.
from
[testCentral].[ReplMonitor].[dbo].[replMonitor] c
join 
@tokenResults a
on --fill out your join
join 
LotteryRetail.dbo.casino b
on --fill out your join
0 голосов
/ 08 декабря 2011

Я согласен с t-clausen.dk, слияние сделает вставку и обновление за один раз.

Я думаю, что вы ищете что-то вроде этого для оператора обновления, но трудно сказать, не зная, что такое LotteryRetail.dbo.casino и @tokenResults:

UPDATE [testCentral].[ReplMonitor].[dbo].[replMonitor]
SET monitorDate = @currentDateTime
    ,publicationName = @publicationToTest
    ,publicationDB = @publicationDB
    ,iteration = b.iteration
    ,tracer_id = b.tracer_id
    ,distributor_latency = b.IsNull(distributor_latency, 0)
    ,subscriber = b.subscriber
    ,subscriber_db = b.subscriber_db
    ,Loc_ID = b.b.LOC_ID
    ,subscriber_latency = b.IsNull(subscriber_latency, 0)
    ,overall_latency = b.IsNull(overall_latency, 
    IsNull(distributor_latency, 0) + IsNull(subscriber_latency, 0))
FROM LotteryRetail.dbo.casino b

Это будет работать правильно только в том случае, если [testCentral]. [ReplMonitor]. [Dbo]. [ReplMonitor] имеет только одну запись, в противном случае вам нужно будет добавить предложение WHERE, чтобы ограничить обновление только той записью, которую вы хотите изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...