2016-08-22 2 views
-1

Ich versuche, eine Tabelle aus einer CSV-Werte zu aktualisieren, die ich aus einer anderen Tabelle abholen. Dieser CSV-Wert wird von einer Unterabfrage ausgegeben, die ich auf der Grundlage einer Variablen in der #Form-Tabelle erstellt habe. Jetzt möchte ich die #Form-Tabelle wieder aktualisieren und ich möchte nicht Cursor verwenden. Ich kann die #Form-Tabelle nicht korrekt aktualisieren.Problem beim Aktualisieren der gleichen Tabelle

Unten ist der Code, den ich verwende.

Update f 
SET AuditorComment = (
    Select @Comment = @Comment+', '+a.Value 
    FROM #Form fd 
    LEFT JOIN AuditData a on (fd.FormID=a.objectID and a.ObjectTypeID=12) 
    WHERE [email protected] AND [email protected] AND f.FormID = fd.FormID 
    ) 
From #Form f 

Bitte helfen Sie mir, wo ich es falsch mache.

+0

Erklären Sie das Problem. – Blorgbeard

+0

@Blorgbeard Ich habe die Frage aktualisiert. Danke für das Kommentieren –

Antwort

2

Dies wird nicht so funktionieren. Sie müssen die for xml path oder eine ähnliche Methode verwenden:

update f 
    set AuditorComment = stuff((select ', ' + ad.value 
           from formdata fd join 
            AuditData ad 
            on fd.FormID = ad.objectID and ad.ObjectTypeID = 12 
           where FORM_OID = @frmOID and 
             SubjectID = @subjectId and 
             f.FormID = fd.FormID 
           for xml path ('') 
           ), 1, 2, '') 
    From #Form f; 
+0

Die Auswahl gibt mehrere Zeilen und aufgrund dessen erhalte ich einen Fehler. Unterabfrage hat mehr als 1 Wert zurückgegeben. Mit CSV versuchte ich mehrere Zeilen in einen CSV-Datensatz zu konvertieren –

+0

Sie haben es versäumt, FOR XML PATH ('') nach f.FormID = fd.FormID hinzuzufügen. Es funktionierte nach dem Hinzufügen. Vielen Dank..!! –

+0

@NimbleFungus. . . Sie wollen auch '1, 2, '')' als die letzten drei Argumente zu 'stuff()' - so werden Sie sowohl das Komma als auch den Punkt los. –

Verwandte Themen