2013-05-09 3 views
1

Мы получаем данные из источника excel и сохраняем таблицу Temp и обновляем целевую таблицу с помощью таблицы temp с сохраненной процедурой. Я столкнулся с проблемами с столбцом «comments» в целевой таблице, где, если появился новый комментарий то он должен быть добавлен к существующему комментарию. Загадка здесь столбец таблицы назначения представляет собой комбинацию входных параметров и некоторые поля вместе с comments.Eg:Таблица обновлений с использованием хранимой процедуры

[Target.Comments] = '[Manager ' + @Getdateparameter +'' + uploaded by + '] ' +Temp.comments + '' + Target.comments. 

Когда новый рекорд приходит сегодня,

Comment = [Manager1 May_9_2013 uploader1] robert is in canada 

Если запустить снова в другой день и нет никакого обновления (он должен проверить с существующими комментариями) в комментариях затем

Comment = [Manager1 May_9_2013 uploader1] robert is in canada 

Если есть обновление в комментариях по маю 15-го, то он должен быть

Comment = [Manager1 May_15_2013 uploader1] robert is moved away from canada and now he is in US.[Manager1 May_9_2013 uploader1] robert is in canada 

Как это достичь? Спасибо.

ответ

1

Вы не дают никакой реальной информации на самом деле писать код для вас (вы зацикливание, вставив в одном операторе, и т.д.), но попробовать что-то вроде этого:

UPDATE y 
    SET YourComment=t.NewValue+ISNULL('; '+y.YourComment,'') 
    FROM YourTable    y 
     INNER JOIN YourTempTable t On y.PK=t.PK 
    WHERE t.NewValue IS NOT NULL 

Я кодированный его место a ";" между комментариями, но вы можете удалить, если не нужно. Замените «t.NewValue» конкатенацией строк, которая формирует новый комментарий.

Это действительно проблема схемы. Вы должны создать таблицу комментариев, в которой вы разделите свои разные значения на свои собственные столбцы и будете иметь одну строку за комментарий. В этот момент вы всегда вставляете и не добавляете обновлений или конкатенаций. Вы можете использовать представление или обработку приложения, чтобы комбинировать их для презентации пользователя.

+0

Я написал инструкцию по обновлению внутри курсора, а инструкция обновления: Обновить целевой tar set tar.comments = case, когда temp.comments не является нулевым, тогда «[Manager» + @Getdateparameter + '' + uploaded by + '] '+ temp.comments +' '+ tar.comments else tar.comments end from target_atble внутренний tar join temmp_table temp на tar.PK = temp.PK. Это отлично работает до тех пор, пока тот же комментарий не поступит в другой день, тогда у нас есть дубликаты комментариев в этой области. –

+0

скажите, пожалуйста, что 'uploaded by' не является именем столбца? как это работает даже с пространством? вы не можете добавить 'WHERE YourOldComment NOT LIKE '%' + YourNewComent + '%'' –

+0

И, пожалуйста, никогда не записывайте обновления или вставки или удаления в курсор! Очень плохая привычка, которую нужно сломать. Вам нужно думать, что в наборах не обрабатывается одна запись за раз. – HLGEM

Смежные вопросы