【发布时间】:2014-09-02 08:11:34
【问题描述】:
我有一个巨大的存储过程,它将表中的数据收集到 3 个临时表(表变量)中。
@table1: 50,000 records
@table2: 23,000 records
@table3: 15,000 records
准备好数据后,存储过程执行一个巨大的select语句(180行),将这些临时表和一些物理表中的数据转换为XML格式并返回给客户端。
由于项目的机密性,我不能在这里发布存储过程。存储过程卡在这个select 语句上。即使运行存储过程 24 小时后,它也没有完成执行。
然后我用本地临时表 (#table1, #table2, #table3) 替换了所有表变量。令我惊讶的是,存储过程使用相同的数据成功执行。
我无法理解两种方法的区别;以及为什么使用table variables 无限期执行存储过程?
【问题讨论】:
-
谁告诉你表变量驻留在内存中? blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/30/… - 表变量可以存在于磁盘上,确切地说是在 tempdb 中。
-
@TomTom 感谢您的纠正,编辑了我的帖子
标签: sql sql-server sql-server-2008 tsql stored-procedures