在存储过程中创建一临时表,前台调用查询找不到该临时表!

KLL 2009-08-27 03:29:52
在存储过程中如:
create proc Aa
@age int
as
if object_id('tempdb.dbo.##test') is null
begin
create table tempdb.dbo.##test
(
age int not null,
num int not null
)
insert into ##test values(1,1)
end
else
begin
update ##test set age=@age
end
go

create proc getTest
as
select * from ##test

我是想在前台asp.net中,有一文本框,和一按钮,和一gridview,当点击按钮时,就执行那两个proc,
同时显示数据到gridview中.

表示层后台代码:
protected void Button1_Click(object sender, EventArgs e)
{
int age =Convert.ToInt32(TextBox2.Text.Trim());
DBDAQDateManager.test(age);

GridView2.DataSource = DBDAQDateManager.getTest();
GridView2.DataBind();
}
一运行就出现对象名'.##test'无效.
然而在运行之前,先执行存储过程中的
create table tempdb.dbo.##test

age int not null,
num int not null
)
insert into ##test values(1,1)
再运行好好的。

还有就是在数据库运行也是好好的。把SQL服务断开连接,再连接。这时临时表消失。
再在SQL中执行
exec Aa 2
exec getTest
这能行好好的,再运行程序也是好好的。

我就是想到程序中运行,并判断是否有临时表,无的话就创建添加,有的话就更新。
可就是一运行就报那错。
对象名'##test'无效.
...全文
1116 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_pop 2012-10-22
  • 打赏
  • 举报
回复
额,,,还是没有解决啊
KKL 2009-09-04
  • 打赏
  • 举报
回复
顶下
KLL 2009-09-02
  • 打赏
  • 举报
回复
大哥大姐们帮帮忙呀。
KLL 2009-09-01
  • 打赏
  • 举报
回复
************************************************
我把源代码发给你们帮我看下:
点击下载源代码
连接数据库在web.config文件中。
create proc Aa 
@age int
as
if object_id('tempdb.dbo.##test') is null
begin
create table tempdb.dbo.##test
(
age int not null,
num int not null
)
insert into ##test values(1,1)
end
else
begin
update ##test set age=@age
end
go

建存储过程随便找个数据库。
小弟我这次够详细了,请大家帮帮忙呀。
************************************************
KLL 2009-09-01
  • 打赏
  • 举报
回复
能否给出具体代码呀
alexsada 2009-09-01
  • 打赏
  • 举报
回复
创建这样一个 表 @temp_table 然后 调用看看
guyehanxinlei 2009-09-01
  • 打赏
  • 举报
回复
建一张表,加一个保存SessionID字段可以解决数据操作的问题。
KLL 2009-09-01
  • 打赏
  • 举报
回复
********************************************
我再把问题补充下:
这两个存储过程在SQL中执行的话:
exec Aa 2;
exec getTest;

结果第一次:1 1
再执行一次的话:2 1
这是我所想要的。
可到程序里面就不行了。
在程序里调用第一个存储过程:
create proc Aa 
@age int
as
if object_id('tempdb.dbo.##test') is null
begin
create table tempdb.dbo.##test
(
age int not null,
num int not null
)
insert into ##test values(1,1)
end
else
begin
update ##test set age=@age
end
go

我调试了下都执行了。
可到第二个存储过程:
create proc getTest 
as
select * from ##test

它找不到这个##test.
然后把SQL服务重启。
先把存储过程中的:
create table tempdb.dbo.##test 
(
age int not null,
num int not null
)
insert into ##test values(1,1)

执行一遍好好的。
现在主要就是第二个,那个查询那个。
********************************************
chenyu112 2009-08-31
  • 打赏
  • 举报
回复
楼主可以先建一个数据表,结构与临时表相同。
每次执行存储过程时都判断一下是应该插入还是修改就可以了

变相的解决方法
entertcl174 2009-08-31
  • 打赏
  • 举报
回复
13楼 正解!!!!

83601344 .NET 技术讨论群 刚开,请支持!
KLL 2009-08-31
  • 打赏
  • 举报
回复
可是运行程序之前,先在mssql中创建那临时表的话。再运行程序的话就好好的呀!
存储过程我是每隔一秒调用一次的。
KLL 2009-08-30
  • 打赏
  • 举报
回复
帮帮忙呀!!!
KLL 2009-08-29
  • 打赏
  • 举报
回复
帮帮忙呀,可莫沉了呀!
man_united 2009-08-29
  • 打赏
  • 举报
回复
KLL 2009-08-28
  • 打赏
  • 举报
回复
不行我这,一天到晚都在用呀!
另外我测试了下,执行存储过程Aa,返回受影响的行数为1。
这个没问题。就是gettest这个不行。
chen_ya_ping 2009-08-28
  • 打赏
  • 举报
回复
要不你也可以这样,create table创建一张表,用完了就删除掉
KLL 2009-08-28
  • 打赏
  • 举报
回复
19楼的,能否说具体点
LutzMark 2009-08-28
  • 打赏
  • 举报
回复
不是同一个数据库链接当然找不到那个全局临时表
KLL 2009-08-28
  • 打赏
  • 举报
回复
那位哥们帮帮忙呀,都两星期了呀。
灵雨飘零 2009-08-28
  • 打赏
  • 举报
回复
帮顶。。。。
加载更多回复(16)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧