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

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却能返回结果。。求达人解答

第1个回答  推荐于2018-04-18
用全局临时表:

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本回答被提问者和网友采纳
第2个回答  2010-03-23
在游标里面你换一个临时表看看行不行,select * into 只能创建一次表 再次创建的时候不能重复 要不然创建不成功
第3个回答  2010-03-23
你要先create临时表 #tmp才能够使用它,否则当然找不到了

存储过程中创建临时表显示查询结果,提示对象名无效
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;--...

sql2005存储过程对象名无效
这样的提示说明当前数据库没有这个存储过程 ALTER PROCEDURE 是修改一个存储过程 新建是CREATE PROCEDURE 如果是修改,确认是否选择的是正确的所在数据库或者前面用 use 数据库名

创建存储过程出现错误:对象名'UserLogin'无效
你的数据库还没有存在这个存储过程UserLogin,就进行修改,当然会报错了.创建存储过程:用CREATE 关键字 修改存储过程:用ALTER 关键字 改一下你的SQL语句 ALTER PROCEDURE UserLogin 就可以了

SQL数据库时提示对象名'XXX' 无效,什么原因?
2. 可能您的编写网站程序的时候没有注意通用性,在查询数据时采用了类似 select * from dbuser1.table1 这样的SQL语句,一般来说,这不是一个好的习惯,在这种情况下,如果数据库迁移过的话,经常会导致对象名无效的错误,为了避免这种不必要的问题,建议您在程序中查询数据时,直接用 select * from table1 这样的方...

对象名无效
打开你的存储过程pr_GetRecPicNews,定位到Edu01e_NewsClass,可能是多了一个逗号,小问题

如何解决“SQL对象名无效”的问题
产生SQL对象名无效的问题大多原因是由于数据迁移导致的,下面我们给出解决方法.在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。一、孤立用户的问题 比如,以前的数据库的...

...Driver for JDBC][SQLServer]对象名 'xxx' 无效
对象名无效是说明连接数据库的时候没有找到以xxx命名的对象,比如数据库名,或者表名,或者列名。或者试图,或者存储过程等。

存储过程老报名为 'myCursor' 的游标不存在、对象名 '#Temgps00520130808...
你定义在@sql里面了,当然会提示你没定义的。你这个只能在字符串里处理,出了字符串就失效了

对象名“##YMPCWAudit”无效错误信息:参数“@ViewMode”定义OUTPUT...
存储过程吧?你需要在存储过程的前面声明 ViewMode 类型 大小 output output表示输出

ALTER PROCEDURE [dbo].[InsertUser] ,对象名[dbo].[InsertUser] 无效...
那肯定是数据库没有选对,用use 数据库名 go ALTER PROCEDURE ...

相似回答