消失的全局临时表

时间:2019-01-02 08:53:57

标签: sql-server tsql global-temp-tables

我使用一个非常大的脚本来提取数据库中的数据,该脚本结合了许多不同的数据集,以一种可及时管理的方式呈现数据,我将大量数据插入了许多临时数据中主脚本执行之前创建表。它异步运行,没有其他脚本同时运行。这是批处理运行期间的受控执行,并且绝对可以在执行过程中自行执行。运行仅需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

0 个答案:

没有答案