2011-07-19 6 views
0

レコードをテーブルに追加するのをやめ、レコードごとに1行だけを繰り返し更新する必要があります。歴史を維持する必要はありません。私はこのUPDATEステートメントで作業しましたが、JOINも考慮する正しい構文を取得できません。このINSERTとJOINをUPDATEに変更する

誰でもこのINSERT INTOを単純な更新にする手助けはできますか? UPDATE文の構文を理解したら、IF EXISTS(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 ; 
+0

これを参照してください:http://stackoverflow.com/questions/982919/sql-update-query-using-joins/982947#982947 – gbn

+0

これを見てください:http://stackoverflow.com/質問/ 108403/solutions-for-insert-or-update-on-sql-server –

+0

ありがとうございます。しかし、私はそれを結合で意図したとおりに動作させることができず、 –

答えて

0

私は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]にはレコードが1つしかない場合は、WHERE句を追加して、変更したいレコードのみに更新を制限する必要があります。

1

これには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 
関連する問題