Announcement

Collapse
No announcement yet.

Update über mehrere Zeilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Update über mehrere Zeilen

    In einer MySQL DB konnte ich immer gut ein "Massen"update über mehrere Zeilen wie folgt machen:

    UPDATE Artikel SET Bezeichnung1 = 'Metallgriff Mailand 128 mm Mattchrom' WHERE Artikelnummer = 'N-301001' LIMIT 1;
    UPDATE Artikel SET Bezeichnung1 = 'Metallgriff Mailand 160 mm Mattchrom' WHERE Artikelnummer = 'N-301002' LIMIT 1;
    ....

    Leider klappt da beim MS SQLSERVER2005 nicht, auch wenn ich das LIMIT 1 weglasse.
    Wie ist der korrekte Syntax, wenn ich ein solches Update "im Stapel" über mehrere Zeilen machen möchte?
    Oder muss ich einen anderen Weg wählen?

  • #2
    Hallo,

    Leider klappt da beim MS SQLSERVER2005 nicht..
    Welches Problem macht sich Wie bemerkbar? Wie das folgende Beispiel zeigt, kennt auch der SQL Server 2005 den Stapelbetrieb:

    Code:
    USE tempdb
    GO
    
    CREATE TABLE dbo.TestTbl
    (
      id    INT        NOT NULL IDENTITY PRIMARY KEY,
      wert  VARCHAR(9) NOT NULL
    )
    GO
    INSERT INTO dbo.TestTbl (wert) VALUES ('A');
    INSERT INTO dbo.TestTbl (wert) VALUES ('B');
    INSERT INTO dbo.TestTbl (wert) VALUES ('C');
    GO
    
    -- Aktualisierung im Batchmodus
    UPDATE dbo.TestTbl SET wert = 'B2' WHERE id = 2;
    UPDATE dbo.TestTbl SET wert = 'C2' WHERE id = 3;
    GO
    
    -- Ergebnis prüfen
    SELECT * FROM dbo.TestTbl;
    GO
    
    -- alle Datensätze aktualisieren
    UPDATE dbo.TestTbl SET wert = 'X' WHERE id > 0 ;
    GO
    SELECT * FROM dbo.TestTbl
    GO
    Zuletzt editiert von Andreas Kosch; 02.10.2007, 06:40.

    Comment


    • #3
      Hallo,

      was willst du mit dem Limit ausdrücken?

      Meiner Meinung nach brauchst du das garnicht, da du eh nur einen Eintrag von jeder Artikelnummer in der DB hast (Artikelnummer ist Primärschlüssel oder zumindest UNIQUE Key), also auch eindeutig.
      Wenn das nicht der Fall ist hast du, würde ich meinen, einen Fehler im Konzept gemacht.

      Massenupdates sollten aber per batchfile gehen, ich mache das auch immer so und hatte bislang noch nie Probleme. Ich kann auch in deinem Quellcode keine Fehler entdecken, bis auf das LIMIT 1 (Limit gibt es bei MSSQL nicht).
      Der Äquivalente Befehl heisst hier TOP

      Bsp.: SELECT TOP 5 FROM Table WHERE ...

      Comment

      Working...
      X