22,300
社区成员




exec('select 1 as c into #tb')
select * from #tb
/*********
消息 208,级别 16,状态 0,第 3 行
对象名 '#tb' 无效。
create table #tb(id int)
exec('insert into #tb select 1')
select * from #tb
drop table #tb
/**********
id
-----------
1
(1 行受影响)
问下大家
存储过程里面先执行这个动态语句(为临时表插如数据) 现在数据都成功了
为什么接下来的查询会什么都没有?是不是动态语句一执行完这个临时表就销毁了?
exec (@intotemp)
select * from #temp
MySQL中的临时表使用方法
创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table
(
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)
临时表将在你连接MySQL期间存在。
当你断开时,MySQL将自动删除表并释放所用的空间。
当然你可以在仍然连接的时候删除表并释放空间。
DROP TABLE tmp_table
如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,
临时表将有必要屏蔽(隐藏)非临时表tmp_table。
如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:
CREATE TEMPORARY TABLE tmp_table
(
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP
因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。
然而,HEAP表与一般的表有些不同,且有自身的限制。
--可以做个测试
-->局部临时表测试
-->第一个查询窗口
begin tran
create table #tb(id int)
-->第二个查询窗口
create table #tb(id int)
--发现:执行完第一个查询窗口后执行第二个窗口是可以成功的。
-->全局临时表
--把上边的#tb换成##tb,发现第二个窗口会阻塞!