Исчезающие глобальные временные таблицы - PullRequest
0 голосов
/ 02 января 2019

Я использую очень большой сценарий для извлечения из нашей базы данных, который объединяет множество различных наборов данных, чтобы представить данные таким образом, чтобы их можно было своевременно обрабатывать. Я вставляю много данных во множество временных таблицы перед выполнением основного скрипта. Он работает асинхронно, без одновременного запуска других сценариев. Это контролируемое выполнение во время пакетного запуска, и оно наиболее определенно само по себе во время выполнения. Запуск занимает всего 24 секунды, поэтому мы не имеем дело с перезапуском БД, который является единственным вариантом, который я видел в некоторых Google.

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

Ошибка, которую получают некоторые пользователи:

Invalid object name '##SUM_IRT'

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

IF OBJECT_ID('tempdb..##SUM_IRT') IS NOT NULL
    DROP TABLE ##SUM_IRT

…

CREATE TABLE ##SUM_IRT
(
    ident_id INT NOT NULL PRIMARY KEY,
    ident_val FLOAT NOT NULL
)

…

INSERT INTO ##SUM_IRT
    SELECT rs.ident_id, SUM(rs.ident_val) AS ident_val
    FROM rs_ident rs WHERE rs_ident_category IN( 'A', 'B', 'C' )
    AND (@ExtractDate BETWEEN rs_start_date AND rs_end_date) AND rs_record_status = 'I'
    GROUP BY rs.ident_id

…

SELECT WHEN rst.ident_val IS NULL OR rst.ident_val = 0 THEN
    ''
ELSE
    CAST(CONVERT(NUMERIC(11,2), ISNULL(rst.rst_ident_val, 0)) AS VARCHAR(20)) -- Redudant ISNULL don't ask don't tell.
END AS [ident_val_string]

-- Main script join
LEFT OUTER JOIN ##SUM_IRT rst ON rst.ident_id = po.ident_id

…

IF OBJECT_ID('tempdb..##SUM_IRT') IS NOT NULL
    DROP TABLE ##SUM_IRT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...