2011-02-08 3 views
1

オンラインとここでいくつかのことを読むが、今混乱している。私がしたいのは単純な挿入です...レコードが既に存在する場合は、代わりにそれを更新したいのですが、これはms sqlserverでどのように達成されますか?私はDUPLICATE KEY上で使用しようとしていたが、SQLServerのは迷惑だった同等のものを、持っていないので、これを行うための最善の方法は何であるsqlserver挿入方法はありますが、存在する場合は、代わりに更新を実行しますか?

INSERT INTO AdvertiserCategoryJoin 
        (AdvertiserID, CategoryID) 
VALUES  (502910, 2) 

:ここ

は、インサートの簡単な例であります?

答えて

0

いつでもIF..ELSE条件を使用できます。

IF (SELECT COUNT(*) FROM AdvertiserCategoryJoin WITH(NOLOCK) WHERE AdvertiserID = 502910) = 1 BEGIN 
UPDATE AdvertiserCategoryJoin 
SET CategoryID = 2 
WHERE AdvertiserID = 502910 
END ELSE BEGIN 
INSERT INTO AdvertiserCategoryJoin 
        (AdvertiserID, CategoryID) 
VALUES  (502910, 2) 
END 

EXCEPTまたはEXISTSを使用してこれを行う方法もあります。これは本当にあなた次第で、書き込み/保守が容易なことはわかりますし、SQL 2008を使用していて挑戦している場合は、MERGEコマンドを使用することができます。

+0

は私が働くこのオプションを選んだ、と私はそれを理解:)感謝を。 – flavour404

0

SQL2008バージョンを使用していると仮定すると、そのための非常に良い声明があります。 MERGE

MERGE AdvertiserCategoryJoin AS target 
USING (SELECT @AdvertiserID, @CategoryID) AS source (AdvertiserID, CategoryID) 
ON (target.AdvertiserID = source.AdvertiserID) 
WHEN MATCHED THEN 
    UPDATE SET CategoryID = source.CategoryID 
WHEN NOT MATCHED THEN 
    INSERT (AdvertiserID, CategoryID) 
    VALUES (source.AdvertiserID, source.CategoryID) 
    OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable; 
関連する問題