有关存储过程中使用动态SQL的疑问, 请大家赐教, 谢谢!

gzchrishu 2004-12-02 11:12:25


--declare @aa varchar(200)
--select @aa='select * from member'
--exec( @aa )

--keyword sp
drop proc sp_keyword_search;
go

create proc sp_keyword_search
@offset int,
@pagesize int=20, --默认每页20条记录
@whereclause varchar(200)='1=1', -- default condiction
@orderclause varchar(200)='b.LevelId desc, b.BusinessName asc' -- default condiction
as
set nocount on

if @offset<@pagesize
set @offset=0

declare @sql varchar(300)
if @offset=0
begin
set rowcount @pagesize
select @sql='select * from business as b where ' + @whereclause+' order by '+ @orderclause
exec (@sql)
end
else
begin
declare @i int

set @i=@offset+@pagesize
set rowcount @i
select @sql='select businessId into #t from business as b where ' + @whereclause+' order by '+ @orderclause
exec( @sql)

set @i=@offset
set rowcount @i
delete from #t

select * from business a
where exists(
select * from #t where businessId=a.businessid)
end
set rowcount 0
go


调用 exec prc_keyword_search @offset=100; 出错
错误信息:
服务器: 消息 208,级别 16,状态 1,行 1
对象名 '#t' 无效。
服务器: 消息 208,级别 16,状态 1,过程 prc_keyword_search,行 40
对象名 '#t' 无效。



是什么原因?难道SP中的动态SQL不可以使用临时表吗?
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
passionke 2004-12-03
  • 打赏
  • 举报
回复
先建立临时表,在用insert插入数据
mastersky 2004-12-03
  • 打赏
  • 举报
回复
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'business' 无效。
服务器: 消息 208,级别 16,状态 1,过程 sp_keyword_search,行 30
对象名 '#t' 无效。
gzchrishu 2004-12-03
  • 打赏
  • 举报
回复
先建立临时表,在用insert插入数据



这样的话表的数据有可能给其他的用户访问的到,也不可行哦
gzchrishu 2004-12-02
  • 打赏
  • 举报
回复
哦, 我写错了, 我调用的时候是执行:
exec sp_keyword_search @offset=100;


TO: guanshiyu123(老关)
我这个情况不能用物理表, 因为这是一个数据分页的SQL
guanshiyu123 2004-12-02
  • 打赏
  • 举报
回复
临时表的这种情况我倒是不知道,
不过你的需求可以用物理表来完成啊,把#t换成一个物理表,例如ttt,用完了之后,判断ttt是否存在,存在就删除它,就可以了,只是代价大点,

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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