2016-08-22 3 views
-1

Я пытаюсь ОБНОВИТЬ таблицу из значений CSV, которые я получаю из другой таблицы. Это значение CSV выводится в подзапросе, который я создал на основе переменной в таблице #Form. Теперь я хочу обновить таблицу #Form снова, и я не хочу использовать курсор. Я не могу правильно обновить таблицу #Form.Проблема в обновлении той же таблицы

Ниже приведен код, который я использую.

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 

Просьба помочь мне, где я делаю это неправильно.

+0

Объясните проблему. – Blorgbeard

+0

@Blorgbeard У меня есть вопрос по обновлению. Спасибо за комментарий –

ответ

2

Это не будет работать так. Вам необходимо использовать for xml path или аналогичный метод:

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

The Select дает несколько строк и из-за чего я получаю сообщение об ошибке. Подзапрос возвратил более 1 значения. С помощью CSV я пытался преобразовать mulktiple строки в CSV-запись. –

+0

Вы пропустили добавление FOR XML PATH ('') после f.FormID = fd.FormID. Это сработало после добавления этого. Благодаря..!! –

+0

@NimbleFungus. , , Вы также хотите '1, 2, '')' в качестве последних трех аргументов 'stuff()' - поэтому вы избавляетесь от запятой и периода. –