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