Проблемы загрузки служб SSIS с таблицей аудита - PullRequest
0 голосов
/ 06 мая 2020

Я просто создаю простую инкрементную нагрузку SSIS, чтобы разобраться в процессе, и в настоящее время у меня проблема с моей таблицей аудита. Происходит то, что загрузка будет выполняться нормально, и новая строка в таблице аудита будет вставлена ​​из первой задачи выполнения, но когда я go обновляю поле AuditEndDate в таблице аудита в конце процесса загрузки, он обновляет только первую строку в таблице. См. Ниже для справки.

Моя таблица аудита состоит из:
AuditID INT (первичный ключ)
TaskID INT
AuditStartDate DATETIME
AuditEndDate DATETIME

Моя загрузка процесс успешен и работает. Теперь я представил задачу выполнения SQL в начале загрузки с хранимой процедурой, которая вставляет новую строку в таблицу аудита с новым номером AuditID и датой начала. В конце процесса загрузки у меня есть еще одна задача выполнения SQL, которая просто обновляет поле AuditEndDate в той же строке с помощью GETDATE ().

Я использую источники OLE DB

Моя процедура загрузки выглядит так:

enter image description here

Моя хранимая процедура для Вставка в таблицу аудита в первой задаче;

(
        @TaskID INT 
        , @LoadStartDateTime datetime 
        , @LoadEndDateTime datetime 

)
AS
BEGIN
    SET NOCOUNT ON;


    SET @LoadStartDateTime = ISNULL(@LoadStartDateTime, GETDATE())


    -- Insert the log record
    INSERT INTO [SM_SSIS_Audit_Log]
    (
        TaskID 
        , LoadStartDateTime 
        , LoadEndDateTime 


    ) VALUES (
        @TaskID 
        , @LoadStartDateTime 
        , @LoadEndDateTime 

    )

END

Моя хранимая процедура для обновления таблицы в последней задаче выполнения;

(
    @AuditID        INT
)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
    SET NOCOUNT ON;

    UPDATE SM_SSIS_Audit_Log 
    SET
         LoadEndDateTime  = GETDATE()

    WHERE
        AuditID  = @AuditID

    SET NOCOUNT OFF;
END

Моя задача выполнения для вставки:

[SM_SSIS_LoadBegin] ?, NULL, NULL

Моя задача выполнения для обновления:

[SM_SSIS_TaskEnd] @AuditID = ?

Настройка My Parameter в первой задаче выполнения:

enter image description here

Мои настройки параметров в последней задаче выполнения:

enter image description here

Моя таблица аудита выглядит так:

enter image description here

Как видите, обновляется только первая строка, а не текущая созданная строка. Кто-нибудь знает, что я сделал не так, и предложите что-нибудь, пожалуйста.

Если вам нужна дополнительная информация, прокомментируйте, и я помогу.

Большое спасибо!
SM

1 Ответ

1 голос
/ 14 мая 2020

Спасибо за дополнительную информацию.

Сначала вы вставляете новую строку с TaskId плюс даты, а затем пытаетесь обновить строку с AuditId в качестве ключа? Сейчас он ведет себя так, потому что это разные ценности. Как видите, вставка добавляет новую строку с 0 в качестве TaskId. Затем вы обновляете строку, где AuditId равен 0.

Кажется, что AuditId - это столбец идентификации, который заполняется сам собой. Если вы хотите обновить последний AuditId, вы должны вывести его значение в процедуре [SM_SSIS_LoadBegin], используя @@ IDENTITY или SCOPE_IDENTITY () (подробнее здесь: https://docs.microsoft.com/en-us/sql/t-sql/functions/identity-transact-sql?view=sql-server-ver15). Сохраните это значение в локальной переменной в SSIS (не для параметра пакета, который вы использовали, локальные переменные имеют префикс User :: nnn), как описано здесь: https://dba.stackexchange.com/a/114831.

Затем в задаче обновления измените ссылку параметра пакета на созданную вами локальную переменную, и она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...