2009-08-14 3 views
1

Ich habe einen klassischen Fall von UPDATE oder Einfügen von Daten in eine Tabelle. Ich bin mir nicht sicher, ob ich nur ein UPDATE machen sollte und wenn ich null ROWCOUNT bekomme, dann führe einen INSERT aus. Alternativ habe ich Gerüchte gehört, dass das MERGE-Statement dies nun ersetzt, aber ich bin mir nicht sicher, wie und ob es in dieser Situation angebracht ist.Ist die Sql2008 MERGE-Syntax, was ich tun sollte, hier?

Hier einige Beispiel-SQL, um dies zu demonstrieren ...

ALTER PROCEDURE [dbo].[InsertLocationName] 
(
    @SomeId INTEGER, 
    @SomeName NVARCHAR(100) 
) 
AS 
BEGIN 
    SET NOCOUNT ON 

    UPDATE TableFoo 
    SET SomeName = @SomeName 
    WHERE SomeId = @SomeId 

    -- Did we update something? 
    IF @@ROWCOUNT <= 0 
     -- Nope, so add the record. 
     INSERT INTO TableFoo 
     VALUES (@SomeName) 

END 

Gedanken?

Antwort

1

Sicher - die MERGE-Syntax ist wahrscheinlich die einfachste. Sie müssen im Grunde:

  • eine Zieltabelle
  • eine Quelltabelle von
  • ein JOIN-Bedingung für abgestimmt oder nicht abgestimmt Reihen auszuführen
  • ein Bündel Erklärung zu lesen zu aktualisieren.

So sieht es im Grunde so etwas wie diese:

MERGE TableFoo as t 
USING TableFooSource as s 
ON t.SomeID = s.SomeID 
WHEN MATCHED THEN 
    UPDATE SET t.SomeName = s.SomeName 
WHEN NOT MATCHED THEN 
    INSERT(SomeName) VALUES(s.SomeName) 
; 

Sie das Semikolon am Ende nicht vergessen !!

Marc

PS: Aktualisiert Ihre Tabellen- und Feldnamen zu verwenden. Der Punkt hier ist - die Menge der Daten, die aktualisiert werden soll, muss in einer eigenen Quellentabelle sein (wenn nötig, Bulk-Import von zB einer externen Datei) und dann die gesamte Operation (alle INSERTs und UPDATEs) durchgeführt werden in einer einzigen SQL-Anweisung.

+0

Marc, kann u Ihre Antwort mit meinem Beispiel SQL bearbeiten? –

+0

@Marc, also können Sie nicht, dass eine Zieltabelle und eine Quellentabelle dasselbe sind? –

+0

nein - das wird nicht funktionieren. Sie müssen die aktuelle Tabelle haben, die alle Ihre Daten hat, und dann müssen Sie eine Tabelle mit den Änderungen angewendet werden, um –