求教在调用一个存储过程时出现的错误——对象名未知

malingxian 2007-04-10 10:39:48
昨天写了一个通用的分页存储过程,在查询分析器中执行一点问题没有,但是在程序中调用却出现问题:
"对象名 '#TMP_Table_10042007103704717' 无效。"

求教各位大侠,谢过了。

该存储过程用法示例:execute GetRecordFromPage 'select * from syscolumns',10,50 --从第10条记录开始取50条记录

存储过程代码如下:
CREATE PROCEDURE GetRecordFromPage
@strSql as nvarchar(2000) = null, --要查询语句如 Select top 30 * from orders
@startRow as int = null, --从其开始的从零开始的记录号
@maxRows as int = null --要检索的最大记录数
AS
DECLARE @stopRow as int
declare @dt datetime
declare @tbtmp varchar(50)
declare @tbtmpout varchar(50)

set @dt=getdate() --获取当前时间,用于建立临时表
--用于建立查询表
set @tbtmp = 'Table_' + replace(replace(convert(varchar,@dt,13),' ',''),':','')
--用于建立查询表临时表
set @tbtmpout = '#TMP_' + @tbtmp
--select @dt,@tbtmp,@tbtmpout

set @stopRow = @startRow + @maxRows

set @strSql = N' Select top ' + CAST(@StopRow as nvarchar(9)) + '*, IDENTITY(int,1,1) AS TempIDKey_Num '
+ ' INTO ' + @tbtmpout
+ ' FROM( ' + @strSql + ') ' + @tbtmp
+ '; Select * From ' + @tbtmpout +' Where TempIDKey_Num>=' + CAST(@StartRow as nvarchar(9))
execute (@strSql)
GO
...全文
783 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
malingxian 2007-04-11
  • 打赏
  • 举报
回复
调用代码贴出来:

If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.CommandType = CommandType.StoredProcedure
DbCmd.CommandText = "GetRecordFromPage"
DbCmd.Connection = DBConn
DbCmd.Parameters.Add ("@strSql","select * from sysobjects")
DbCmd.Parameters.Add ("@PageIndex",2)
DbCmd.Parameters.Add ("@PageSize",10)

Dim NewDBAdp As New SqlClient.SqlDataAdapter(DbCmd)
Dim ds As New DataSet("Proc DataSet")
NewDBAdp.FillSchema(ds, SchemaType.Source) '带有数据的结构信息
NewDBAdp.Fill(ds)
NewDBAdp.Dispose()
DisConnect()
Return ds
malingxian 2007-04-11
  • 打赏
  • 举报
回复
谢谢诸位!
问题已经搞定。是NewDBAdp.FillSchema(ds, SchemaType.Source) '带有数据的结构信息
的原因。
虽然问题是自己解决的,但是还是谢谢各位!
jetxia 2007-04-10
  • 打赏
  • 举报
回复
在查询分析器中 执行 execute GetRecordFromPage 有没有问题?
liuberlin 2007-04-10
  • 打赏
  • 举报
回复
#TMP_Table作用域的问题,#TMP_Table只在存储过程中有效,存储过程执行完了后,#TMP_Table就失效了
CathySun118 2007-04-10
  • 打赏
  • 举报
回复
#TMP_Table是存储过程中建的临时表吧,在数据库中不是物理存储的吧
j9988 2007-04-10
  • 打赏
  • 举报
回复
刚刚错了.认真看了半天.没有错! 其它原因.
hcl8260 2007-04-10
  • 打赏
  • 举报
回复
学习,帮顶
jrl5365 2007-04-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/jrl5365/archive/2006/08/15/1067533.aspx
flyin2006 2007-04-10
  • 打赏
  • 举报
回复
+ ' INTO ' + @tbtmpout
j9988 2007-04-10
  • 打赏
  • 举报
回复
非全局变量临时表使用是有限制的.
把#TMP改成##TMP就可以了.当然最好不要这么用.多用户会有冲突.

gui0605 2007-04-10
  • 打赏
  • 举报
回复
还是把调用代码发出来分析下
hertcloud 2007-04-10
  • 打赏
  • 举报
回复
不知道 楼主是不是 调用 时候的 代码有问题

楼主可以贴出来看看...


如果需要 分页程序

可以看看

http://blog.csdn.net/hertcloud/category/281167.aspx


110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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