存储过程中创建临时表显示查询结果,提示对象名无效

ALTERprocedure[dbo].[Keyword_Query](@table_namenvarchar(100)=N'',@col_namenvarchar(20... ALTER procedure [dbo].[Keyword_Query]
(@table_name nvarchar(100)=N''
,@col_name nvarchar(200)=N''--@col_name 格式为col1,col2,col3
,@key_word nvarchar(200)=N'')
as
begin
declare @sql nvarchar(2000) ;
if ( @col_name =N''and @table_name <>N'')
begin
set @sql='select top 1 * into #tmp from'+ @table_name + 'where 1=2 '
exec sp_executesql @sql;
DECLARE colCursor CURSOR FOR--设置游标遍历当前表的列名
select name from syscolumns where id=object_id(@table_name)
OPEN colCursor
FETCH NEXT FROM colCursor
INTO @col_name
WHILE @@FETCH_STATUS=0
BEGIN
set @sql=' select distinct * into #tmp from '+@table_name +' where '+ @col_name+' like '+ '''%'+@key_word+'%'''
exec sp_executesql @sql;--将表内查询出的结果装入临时表
FETCH NEXT FROM colCursor INTO @col_name
END
close colCursor
deallocate colCursor
set @sql=' select distinct * from #tmp'
exec sp_executesql @sql;--去除临时表内的重复数据
set @sql=' drop table #temp'
exec sp_executesql @sql;--删除临时表
end

当调用存储过程的时候总是提示临时表#temp对象名无效。。哎,好烦,请大家帮忙解答一下,提出解决的方法。。谢谢,我是新人,分不多,请理解,本着学习的态度吧
问题补充:例如这样调用: keyword_query basedinf,default, 中国
但是返回的结果总是:
消息 208,级别 16,状态 0,第 1 行
对象名 '#tmp' 无效。
消息 3701,级别 11,状态 5,第 1 行
无法对 表 '#temp' 执行 删除,因为它不存在,或者您没有所需的权限。

但是我如果set @sql=' select * into #tmp from '+@table_name +' where '+......这一句去掉into #tmp却能返回结果。。求达人解答
展开
 我来答
我要注册和登录
推荐于2018-04-18 · TA获得超过451个赞
知道小有建树答主
回答量:301
采纳率:100%
帮助的人:414万
展开全部
用全局临时表:

ALTER procedure [dbo].[Keyword_Query]
(@table_name nvarchar(100)=N''
,@col_name nvarchar(200)=N''--@col_name 格式为col1,col2,col3
,@key_word nvarchar(200)=N'')
as
begin
declare @sql nvarchar(2000) ;
if ( @col_name =N''and @table_name <>N'')
begin
set @sql='select * into ##t from '+@table_name+ ' where 1=2'
exec sp_executesql @sql;
DECLARE colCursor CURSOR FOR--设置游标遍历当前表的列名
select name from syscolumns where id=object_id(@table_name)
OPEN colCursor
FETCH NEXT FROM colCursor
INTO @col_name
WHILE @@FETCH_STATUS=0
BEGIN
set @sql='insert into ##t select distinct * from '+@table_name +' where '+ @col_name+' like '+ '''%'+@key_word+'%'''
exec sp_executesql @sql;--将表内查询出的结果装入表
FETCH NEXT FROM colCursor INTO @col_name
END
close colCursor
deallocate colCursor
set @sql='select distinct * from ##t'
exec sp_executesql @sql;--去除表内的重复数据
set @sql='drop table ##t'
exec sp_executesql @sql;--删除表
end
end
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-23
展开全部
在游标里面你换一个临时表看看行不行,select * into 只能创建一次表 再次创建的时候不能重复 要不然创建不成功
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xingmou999
2010-03-23 · TA获得超过895个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:0
展开全部
你要先create临时表 #tmp才能够使用它,否则当然找不到了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式