为了账号安全,请及时绑定邮箱和手机立即绑定

Sql server 对象名‘#xx’无效

Sql server 对象名‘#xx’无效

烙印99 2018-12-06 11:37:08
我在程序中执行sql语句,有句创建了一个临时表,执行完成后,再执行一个查询,提示对象名无效‘#xx’无效,请问是什么原因? 这些语句用的是同一个连接对象! strSql = "select a.id,autoid ,convert(decimal(30,2),iquantity) as iquantity,convert(decimal(30,2),inum) as iNum, a.Cinvcode,Corufts ,idlsid,iCheckIds, convert(smallint,0) as iOperate into #Ufida_WBBuffers from rdrecords a where 1=0"; comm.CommandText = strSql; comm.ExecuteNonQuery(); strSql = string.Format("select * from #Ufida_WBBuffers"); comm.CommandText = strSql; comm.ExecuteNonQuery(); 如果我把这两句合并再一起去执行是不出错的, 还有,我把这两句放在数据库查询分析器中也是正常执行的。 请问是我没设置某个选项?还是写的语句有问题?请高人指点?
查看完整描述

12 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

没找到对象 啊哈哈~ ,说笑了 你干嘛不把

select * from #Ufida_WBBuffers

放到第一个sql语句里面呢

查看完整回答
反对 回复 2019-01-07
?
www说

TA贡献1775条经验 获得超8个赞

第二句,我只是用来测试说明问题的,方法后面还有很多语句用到这个临时表,提示对象名‘#Ufida_WBBuffers’无效!

查看完整回答
反对 回复 2019-01-07
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

@忽而今夏: 可能是临时表没成功创建,既然其他地方都用 为啥不用视图呢 

查看完整回答
反对 回复 2019-01-07
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

@alone__: 哦 说错了,是创建视图 ,其实我怀疑跟#有关系 你试试把#去掉 啊哈哈~

查看完整回答
反对 回复 2019-01-07
?
繁星coding

TA贡献1797条经验 获得超4个赞

@alone__: 我是跟踪用友U8单据来写的方法,所以没有使用视图

查看完整回答
反对 回复 2019-01-07
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

上一个语句执行完了,所生成的临时表也就被删除了吧,下一句当然找不到了

查看完整回答
反对 回复 2019-01-07
?
暮色呼如

TA贡献1853条经验 获得超9个赞

本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。

查看完整回答
反对 回复 2019-01-07
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

你好!

  我在方法中创建了一个连接对象,所有的sql语句都使用那一个连接对象,我是跟踪用友U8单据来写的方法,所以有很多像这样的sql语句。我们之前也有这样的项目(也是这样使用临时表),好像没有提示对象名无效这个问题!

查看完整回答
反对 回复 2019-01-07
?
慕森王

TA贡献1777条经验 获得超3个赞

想在后续会话中使用前次会话中创建的临时表,请使用##全局临时表!

查看完整回答
反对 回复 2019-01-07
?
MM们

TA贡献1886条经验 获得超2个赞

你好,谢谢你的回答

使用全局临时表,应该可以解决这个错误,但是如果多个用户同时调用一个方法,会不会出现冲突呢!

本地临时表(#)不是当连接关闭时被删除吗?还有一点我们之前的项目,也是同样的语句,但却可以正确执行。

查看完整回答
反对 回复 2019-01-07
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

这是作用域问题。既然是临时表,那么只能在本次回话中使用,如果要跨回话使用,那么使用全局临时表##申明。

这个是局部变量和全局变量的区别。

查看完整回答
反对 回复 2019-01-07
  • 12 回答
  • 0 关注
  • 1044 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信