2016-09-07 6 views
-1

Ich habe ein Problem beim Aktualisieren einer Tabellenvariablen. Ich habe es schon erklärt, aber wenn ich die ganze Abfrage ausführen bekomme ich diesen Fehler:Falsche Syntax in der Nähe von '.'. Während Update einer Variablentabelle

Incorrect syntax near '.'.

Und ich kann nicht um das Problem zu lösen scheinen ...

UPDATE @List 
SET nrID = CASE 
       WHEN nrID IS NULL 
       THEN t1.nrID 
       ELSE nrID 
      END 
FROM @List 
INNER JOIN table1 t1 ON @List.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.n nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr AND t2.Isactive = 0 
+2

versuchen, den Tabellennamen von hier ‚SET @ List.nrID‘ herausnehmen, haben Sie gesagt, dass es bereits welche Tabelle Sie aktualisieren. –

+3

Sie haben table2 den Alias ​​von "O" gegeben, aber Sie fügen dem Alias ​​von "t2" bei. In Ihrem Code ist kein "t2" definiert. – JiggsJedi

+0

Wenn Sie "nrID" mit "table1" verbinden, ist Ihre set/case -Anweisung redundant, "@ List.nrID" wird nie null sein, da es ein Join-Prädikat ist und null kann nicht zu irgendetwas als solches gefügt werden kann nicht auf Gleichheit geprüft werden. Mit anderen Worten, Ihr innerer Join zu 'table1' entfernt sofort alle Zeilen mit einer Null' 'List.nrID' '- so wird jede gefundene Zeile gerade auf' @ List.nrID' aktualisiert. – JiggsJedi

Antwort

0

Vielen Dank für die Hilfe, änderte meine erklärte @ Tabelle zu erstellen @temptable und es nahm meine falsche Syntaxfehler.

Wie für die Abfrage ich verwendet (Beispiel);

UPDATE Person 
    SET Car = ISNULL(@Car, Car), 
     HairColour = ISNULL(@HairColour, HairColour), 
1
UPDATE List 
SET List.nrID = t1.nrID 
FROM @List AS List 
INNER JOIN table1 t1 ON List.nrID = t1.nrID 
INNER JOIN table2 t2 ON t1.nrID = t2.nrID 
WHERE t1.nrID = t2.nrID AND t2.Isactive = 0 

Wie erwähnt in den Kommentaren der innere Join wird alle Nullen in Ihrem Fall entfernen

0

die Sie interessieren,

UPDATE L 
SET L.nrID = ISNULL(t1.nrID, t2.nrID) 
FROM @List L 
INNER JOIN table1 t1 ON L.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr 
    AND t2.Isactive = 0 
Verwandte Themen