存储过程中创建临时表显示查询结果,提示对象名无效
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却能返回结果。。求达人解答 展开
(@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却能返回结果。。求达人解答 展开
3个回答
展开全部
用全局临时表:
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
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 只能创建一次表 再次创建的时候不能重复 要不然创建不成功
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要先create临时表 #tmp才能够使用它,否则当然找不到了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询