UPDATE К изначальному вопросу:MERGE Заявление об ошибке
Чтобы дать некоторое представление о том, что я делаю. У меня есть таблица с надписью [Staging].[HRIS_EEMaster]
в этой таблице - информация о сотрудниках, статус в компании и т. Д. Я использую их персональные идентификационные номера в качестве ключа [PersNo]
. У меня есть столбец, который мы недавно добавили, который отображается, если прекращение работника было добровольным или принудительным [Vol_Invol]
. Похоже, что в какой-то момент представитель HR не был осторожен и не упустил добавление этой ценности к 4 сотрудникам. Я попытался вернуться к источнику, чтобы исправить эту информацию, но прошло слишком много времени, и я не могу редактировать данные сейчас.
Что я хочу сделать, это обновить поле [Vol_Invol]
для 4 сотрудников, используя ключ [PersNo]
. Мне нужен сценарий UPDATE, который будет выглядеть на [Staging].[HRIS_EEMaster]
, найдите [PersNo]
для 4 сотрудников, а затем обновите пустое поле [Vol_Invol]
с помощью «Добровольные» (эти 4 были все добровольными условиями). У каждого сотрудника есть уникальный [PersNo]
.
Я добавлю этот скрипт в существующий пакет SSIS. Этот пакет SSIS работает один раз в месяц. Промежуточная таблица усекается, а затем загружается новыми данными. Существует второй пакет с SCD, который передает основную таблицу, которая используется для создания отчетов.
Я хочу добавить скрипт UPDATE к задаче SQL, чтобы он обновлял (исправляет) эти четыре пробела каждый раз, когда данные вытягиваются. Я делаю что-то подобное с приведенным ниже кодом, чтобы исправить недостающие МВЗ, которые были удалены по ошибке.
Надеюсь, это поможет, пожалуйста, дайте мне знать, что вам нужна дополнительная информация.
ОРИГИНАЛЬНЫЙ ПОСТ:
Я работаю на отчет HR и я должен исправить 4 сотрудников, которые отсутствуют в Termination статуса. Раньше я использовал следующее Заявление, чтобы исправить проблемы, связанные с отсутствующими Центрами затрат.
MERGE [Staging].[HRIS_EEMaster] AS tgt
USING (
SELECT PersNo AS EmpID,
Vol_Invol AS VIStat
FROM [dbo].[HRIS_MissingVol_Invol_Status]
) AS src ON src.EmpID = tgt.PersNo
WHEN NOT MATCHED BY TARGET
THEN INSERT (
PersNo,
Vol_Invol
)
VALUES (
src.EmpID,
src.VIStat
)
WHEN MATCHED
THEN UPDATE
SET tgt.PersNo = CASE
WHEN src.VIStat > '' THEN src.VIStat
ELSE tgt.Vol_Invol
END;
Когда я выполняю скрипт возвращает ошибку:
Msg 245, Level 16, Stat 1, Line 1
Conversion failed when converting the nvarchar value 'Voluntary' to data type int.
Я не уверен, что это говорит о том, как я просто пытаюсь поставить слово «добровольный» из таблицы, я создал (см. выше сценарий для имени таблицы) на промежуточную таблицу (также выше), а столбец [Vol_Invol] - это nvarchar (50) в обеих таблицах.
В основном у меня есть 4 человека, у которых отсутствует требуемый статус (историческая информация, которая больше не может быть исправлена в источнике), и я хочу запустить это заявление MERGE, чтобы заменить Blank, который поступает из Monthly Export с правильным значением ,
Этот скрипт будет использоваться как задача SQL в уже существующем процессе SSIS.
Я не думаю, что вы пытаетесь поместить слово «Добровольное» в колонку «Vol_Invol» - вы пытаетесь поместить его в столбец «PersNo». –
Также я бы рассмотрел только использование отдельных инструкций вставки и обновления. ['MERGE' - это гнездо шершней, ожидающее прыжка на вас) (http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/). –
@AaronBertrand, можете ли вы предложить заявление о обновлении? В принципе, если PersNo = «12345», то я хочу, чтобы Vol_Invol был «Добровольным», иначе он должен быть тем, что уже существует. Раньше я делал обновления, но только в том же столбце. –