Faran Saleem Ответов: 1

Как обновить существующие записи в таблице SQL при импорте через файл excel?


Привет,

Я разрабатываю механизм загрузки, где пользователь будет загружать файл excel в таблицу sql с помощью нажатия кнопки.
Файл Excel со столбцами Ref #, EndDate,StepName и StepResponse.
И мой SQL таблице есть столбцы Ref#, Login_Date, Decision_Date StepName и StepResponse.
Файл excel будет ежедневно загружаться в базу данных.
колонка StepName в файле excel могут быть такие записи, как Бюро-пул или Уровень2.
Ссылка# является уникальным столбцом в файле excel. Файл Excel загружается из другой системы, и он загружается, а затем загружается в таблицу SQL на ежедневной основе.
Теперь давайте предположим, что у меня есть случай с Ref#= 'abc123' и StepName = 'BureauPull' и всякий раз, когда StepName = BureauPull затем Дата окончания будет сопоставлен с Login_Date в SQLTable и всякий раз, когда StepName = Level2 то Дата окончания будет сопоставлен с дата принятия решения.
Теперь скажем, когда я загружаю этот файл excel на второй день и имя шага того же случая, т. е. Ref#= 'abc123' изменения от "BureauPull" к "Уровень 2" поэтому, когда я загружаю этот файл в таблицу SQL, мне нужно также обновить предыдущий загруженный случай. Теперь же Дата окончания будет сопоставлен с дата принятия решения.
Я надеюсь, что объяснил это хорошо, если нет, пожалуйста, не стесняйтесь спрашивать, и я постараюсь прояснить любую путаницу.
С нетерпением жду вашей обычной поддержки.


Спасибо

Что я уже пробовал:

Я искал в интернете, но не смог найти никакого подходящего решения

1 Ответов

Рейтинг:
0

Jörgen Andersson

Загрузите файл excel в таблицу stagetable с теми же столбцами, что и файл Excel.
Воспользуйся ПОГЛОЩАТЬ[^] для вставки или обновления в итоговую таблицу.
На следующий день Вы усекаете stagetable перед вставкой следующего файла Excel.


Faran Saleem

Спасибо за ваш ответ.
Я пытаюсь это сделать, я построил следующий запрос

Слияние od_test2 T --tareget
Использование OD_TEST S --source
ВКЛ. (S. ref = T. REF)
ПРИ СОВПАДЕНИИ
ЗАТЕМ ОБНОВИТЕ
Набор т. LOGIN_DATE =
(ДЕЛО
Когда s. stepname IN ('BUREAUPULL') затем преобразуется(VARCHAR, s.[Дата окончания])
ELSE CONVERT(VARCHAR, s.[LOGIN_DATE])
Конец С. LOGIN_DATE),
(ДЕЛО
Когда s. stepname IN ('l2', 'l3') Затем преобразуйте(VARCHAR, s.[Дата окончания])
ELSE CONVERT(VARCHAR, s. [DECISION_DATE])
Конец С. DECISION_DATE)

КОГДА НЕ СООТВЕТСТВУЕТ ЦЕЛИ
Затем вставьте (Target_Column_Names)
Значения (Source_Column_Names)

КОГДА НЕ СООТВЕТСТВУЕТ ИСТОЧНИКУ
ПОТОМ УДАЛИТЬ;


Но вышеприведенный запрос bis дает мне синтаксическую ошибку. Вы можете помочь мне решить эту проблему?
я пытаюсь использовать case с обновлением. Когда stepname является BureauPull на enddate должен быть вставлен в Login_Date и когда stepname является L2 или L3 enddate должен вам вставить в Decision_Date

Jörgen Andersson

Можно указать только один столбец в предложении Update. Вам, вероятно, нужно что-то вроде этого:
Слияние od_test2 T --target
Использование OD_TEST S --source
На С. = Т. Реф Реф
ПРИ СОВПАДЕНИИ ЗАТЕМ ОБНОВИТЕ
Набор т. LOGIN_DATE = (
ДЕЛО
Когда s. stepname IN ('BUREAUPULL') затем преобразуется(VARCHAR, s.[Дата окончания])
ELSE CONVERT(VARCHAR, s.[LOGIN_DATE])
Конец С. LOGIN_DATE
)
, T. DECISION_DATE = (
ДЕЛО
Когда s. stepname IN ('l2', 'l3') Затем преобразуйте(VARCHAR, s.[Дата окончания])
ELSE CONVERT(VARCHAR, s. [DECISION_DATE])
Конец С. DECISION_DATE
)
КОГДА НЕ СООТВЕТСТВУЕТ ЦЕЛИ
Затем вставьте (Target_Column_Names)
Значения (Source_Column_Names)

КОГДА НЕ СООТВЕТСТВУЕТ ИСТОЧНИКУ
ПОТОМ УДАЛИТЬ;

Faran Saleem

Я пробовал это сделать, но это дает мне синтаксическую ошибку рядом с конечной скобкой регистра