我用的是SQL server2000
Q1.如何清空table变量里的值,我想达到普通表truncate table 的效果
----------
直接用delete,,在会话结束后.表变量生命周期结束.Q2.如何把存储过程返回的结果集插入到表变量里?
我尝试通过下面方式插入值
declar @t table(......) --要被插入的表变量
insert @t exec getHC_1 ... --getHC_1为一存储过程
但是提示如下错误:
服务器: 消息 197,级别 15,状态 1,过程 getHC_1,行 31
无法在向表插入变量时将 EXECUTE 用作源。
-------------
只临时表代替表变量.3.在看.好长.
Q1.如何清空table变量里的值,我想达到普通表truncate table 的效果
----------
直接用delete,,在会话结束后.表变量生命周期结束.Q2.如何把存储过程返回的结果集插入到表变量里?
我尝试通过下面方式插入值
declar @t table(......) --要被插入的表变量
insert @t exec getHC_1 ... --getHC_1为一存储过程
但是提示如下错误:
服务器: 消息 197,级别 15,状态 1,过程 getHC_1,行 31
无法在向表插入变量时将 EXECUTE 用作源。
-------------
只临时表代替表变量.3.在看.好长.
----------
直接exec b
declar @t table(......) --要被插入的表变量
insert @t(co1,co2..) exec getHC_1
insert into @t(id,name) exec('select id,name from sysobjects')服务器: 消息 197,级别 15,状态 1,行 2
无法在向表插入变量时将 EXECUTE 用作源。--表变量不行,用用户表吧
create table t (id int,name varchar(60))
insert into t(id,name) exec('select id,name from sysobjects')
你在使用完全局临时表后删除掉就可以了,
重新执行的时候就会重新创建,
PS:
或者你在需要使用全局临时表的时候判断一下是否已经存在该全局临时表,
如果存在,直接往里面写入数据或者删除原有数据然后重新写入就行了,
貌似表变量不好操作,
不推荐。
insert @t1(bus_name,e_stop,num) exec dbo.getHC_0 @s_stop,@temp_stop --返回bus_id,e_stop,num并填充进@t1
insert @t2(bus_name,e_stop,num) exec dbo.getHC_0 @temp_stop,@e_stop --返回bus_id,e_stop,num并填充进@t2
仍旧提示:
服务器: 消息 197,级别 15,状态 1,过程 getHC_1,行 31
无法在向表插入变量时将 EXECUTE 用作源。
http://topic.csdn.net/u/20080608/14/e46b43e2-0808-4e83-9333-15bbebce02b7.html?seed=435989385
...select ... --返回记录集
gocreate proc b
...
create table #t (...)
insert #t(...) exec a --运行a并取得结果
... --处理delete #t
insert #t(...) exec a --第而此运行a并取得结果
... --处理...
go
楼主将两个完全没有关联的临时表(虽然分布在两个不同的存储过程中,但存在调用关系)取了相同的名字,仅此而已,只要不是这种巧合,就完全没有问题。
因此,只要将其中的一个改名,就没有问题了。
Haiwer说的有道理,我通过先建立全局临时表用完再删除它的方法把问题解决了,只是通过JDBC调用此存储过程会引发内存溢出,不知为何。
Herb2的建议也不错,我会去尝试的
2000只有用臨時表