存储过程临时表的问题

hxy2436 2008-12-18 12:27:02
以下是我写的一个存储过程,为什么执行的时候总是提示"对象#tempTable无效",
急呀,请高手进

CREATE PROCEDURE [UP_Envelope_Select]
(
@general_Envelope_Check_FLag int =0, --the first-coming of Envelope
@back_Envelope_Check_FLag int =0, --the flag of back's Envelope
@PageSize int = 15, --the size of a page
@PageIndex int = 1 --the index of the page
)
AS
begin
DECLARE @SelectStatement NVARCHAR(500)
DECLARE @SelectFirstPage NVARCHAR(200)
DECLARE @SelectIndexPage NVARCHAR(500)
DECLARE @DropStatement NVARCHAR(50)

SET @SelectStatement = ' SELECT id,title,submitdate,isback into #tempTable FROM dbo.T_Envelope where CheckedFlag='+ str(@general_Envelope_Check_FLag) + ' and isback=0
union
select DISTINCT id,title,submitdate,isback from Envelope_Back where isback=1 and RefuseFlag=' + str(@back_Envelope_Check_FLag)

SET @SelectFirstPage = ' SELECT TOP ' + str(@PageSize) + ' * FROM #tempTable '
PRINT @SelectFirstPage
EXECUTE sp_executesql @SelectFirstPage
end
GO
...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatverve 2008-12-18
  • 打赏
  • 举报
回复
哦,我的不是#temptable,但是我的也是临时表。
greatverve 2008-12-18
  • 打赏
  • 举报
回复
greatverve 2008-12-18
  • 打赏
  • 举报
回复
--================临时表入门示例================== 
--================张树强==081218================
create procedure [dbo].[Test_TempTable]
as
begin
declare @indextable table(id int identity(1,1),nid int) --这个临时表,有一个id主键,自增。
insert into @indextable (nid) select id from ttest --把数据插入临时表
select * from @indextable
end
GO
mengxj85 2008-12-18
  • 打赏
  • 举报
回复
SELECT id,title,submitdate,isback  into #tempTable  FROM dbo.T_Envelope where CheckedFlag=str(@general_Envelope_Check_FLag) and isback=0 
union
select DISTINCT id,title,submitdate,isback from Envelope_Back where isback=1 and RefuseFlag=str(@back_Envelope_Check_FLag)

SET @SelectFirstPage = ' SELECT TOP ' + str(@PageSize) + ' * FROM #tempTable '
ljhcy99 2008-12-18
  • 打赏
  • 举报
回复
CREATE PROCEDURE [UP_Envelope_Select]
(
@general_Envelope_Check_FLag int =0, --the first-coming of Envelope
@back_Envelope_Check_FLag int =0, --the flag of back's Envelope
@PageSize int = 15, --the size of a page
@PageIndex int = 1 --the index of the page
)
AS
begin
DECLARE @SelectStatement NVARCHAR(500)
DECLARE @SelectFirstPage NVARCHAR(200)
DECLARE @SelectIndexPage NVARCHAR(500)
DECLARE @DropStatement NVARCHAR(50)

SET @SelectStatement = ' SELECT id,title,submitdate,isback into #tempTable FROM dbo.T_Envelope where CheckedFlag='+ str(@general_Envelope_Check_FLag) + ' and isback=0
union
select DISTINCT id,title,submitdate,isback from Envelope_Back where isback=1 and RefuseFlag=' + str(@back_Envelope_Check_FLag)

EXECUTE (@SelectStatement ); tmp表还没有做成,还没有记录,怎么能查询
SET @SelectFirstPage = ' SELECT TOP ' + str(@PageSize) + ' * FROM #tempTable '
PRINT @SelectFirstPage
EXECUTE sp_executesql @SelectFirstPage
end
GO
jiangshun 2008-12-18
  • 打赏
  • 举报
回复
我想,把临时表建在SET @SelectStatement 这个前面
FireTiger 2008-12-18
  • 打赏
  • 举报
回复
#tempTable的作用域的问题吧?
#tempTable是存在于内存中的,当结束一次 对话时,系统会自动释放这个内表。
所以分布执行动态sql语句时,上下文对话不同肯定找不到#tempTable


set @SelectFirstPage = @SelectStatement +@SelectFirstPage
EXECUTE sp_executesql @SelectFirstPage
这样试下吧。

zetee 2008-12-18
  • 打赏
  • 举报
回复
原因是。该对象没找到,你先执行
SELECT id,title,submitdate,isback into #tempTable FROM dbo.T_Envelope where 1!=1

再执行 @SelectStatement
tian_fang 2008-12-18
  • 打赏
  • 举报
回复
有没有temp表啊?
hxy2436 2008-12-18
  • 打赏
  • 举报
回复
SET @SelectStatement = ' SELECT id,title,submitdate,isback into #tempTable FROM dbo.T_Envelope where CheckedFlag='+ str(@general_Envelope_Check_FLag) + ' and isback=0
union
select DISTINCT id,title,submitdate,isback from Envelope_Back where isback=1 and RefuseFlag=' + str(@back_Envelope_Check_FLag)

SET @SelectFirstPage = ' SELECT TOP ' + str(@PageSize) + ' * FROM #tempTable '

我是先给里面写值再查询的呀,
要是分开在查询分析器里就对着呢,
但是合成到存储过程中就出错了
wuyq11 2008-12-18
  • 打赏
  • 举报
回复
create table #tempTable
()
SELECT TOP ' + str(@PageSize) + ' * FROM #tempTable
先建,再查询

62,268

社区成员

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

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

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

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