临时表 不存在。。。。

bert651153338 2013-07-09 04:22:14
ALTER PROCEDURE [dbo].[p_test]
@TableName nvarchar(50), --表名
@Top nvarchar(10), --数据行
@Fields nvarchar(4000) = '*', --字段名(全部字段为*)
@OrderField nvarchar(4000), --排序字段(必须!支持多字段)
@sqlWhere nvarchar(4000) = Null --条件语句(不用加where)
AS
BEGIN
Declare @sql nvarchar(4000);
Declare @sql2 nvarchar(4000);
Declare @Row nvarchar(20);

if (@Top<>'0')
set @Row = 'top ' + @Top

set @sql ='select top 1 ' + @Fields + ' into #temp1 from ' + @TableName + ' where '
set @sql2 = 'select ' + @Row + ' ' + @Fields + ' into #temp2 from ' + @TableName + ' where '
if (@SqlWhere<>'' or @sqlWhere<>NULL)
begin
set @sql = @sql + @sqlWhere + ' and'
set @sql2 = @sql2 + @sqlWhere + ' and'
end
set @sql = @sql + ' datalength(picpath) <> 0 '
set @sql2 = @sql2 + ' id not in(select id from #temp1) '

exec(@sql)
Exec(@sql2)

select * from #temp1 UNION ALL select * from #temp2
drop table #temp1
drop table #temp2
END





(1 行受影响)
消息 208,级别 16,状态 0,第 1 行
对象名 '#temp1' 无效。
消息 208,级别 16,状态 0,过程 p_test,第 29 行
对象名 '#temp1' 无效。

(1 行受影响)


求高手帮看看。。。。
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw_0736 2013-07-09
  • 打赏
  • 举报
回复
ALTER PROCEDURE [dbo].[p_test] @TableName nvarchar(50), --表名 @Top nvarchar(10), --数据行 @Fields nvarchar(4000) = '*', --字段名(全部字段为*) @OrderField nvarchar(4000), --排序字段(必须!支持多字段) @sqlWhere nvarchar(4000) = Null --条件语句(不用加where) AS BEGIN Declare @sql nvarchar(4000); Declare @sql2 nvarchar(4000); Declare @Row nvarchar(20); if (@Top<>'0') set @Row = 'top ' + @Top --代码变化部分开始 create table #temp1 (字段,字段,字段......) create table #temp2 (字段,字段,字段......) set @sql ='insert into #temp1 select top 1 ' + @Fields + ' from ' + @TableName + ' where ' set @sql2 = 'insert into #temp2 select ' + @Row + ' ' + @Fields + ' from ' + @TableName + ' where ' --代码变化部分结束 if (@SqlWhere<>'' or @sqlWhere<>NULL) begin set @sql = @sql + @sqlWhere + ' and' set @sql2 = @sql2 + @sqlWhere + ' and' end set @sql = @sql + ' datalength(picpath) <> 0 ' set @sql2 = @sql2 + ' id not in(select id from #temp1) ' exec(@sql) Exec(@sql2) select * from #temp1 UNION ALL select * from #temp2 drop table #temp1 drop table #temp2 END
bert651153338 2013-07-09
  • 打赏
  • 举报
回复
引用 4 楼 SmithLiu328 的回复:
变成全局表: set @sql ='select top 1 ' + @Fields + ' into ##temp1 from ' + @TableName + ' where ' set @sql2 = 'select ' + @Row + ' ' + @Fields + ' into ##temp2 from ' + @TableName + ' where '
搞定了。。。。。谢谢,,马上给分。。。。
KevinLiu 2013-07-09
  • 打赏
  • 举报
回复
变成全局表:
set @sql ='select top 1 ' + @Fields + ' into ##temp1 from ' + @TableName + ' where '
set @sql2 = 'select ' + @Row + ' ' + @Fields + ' into ##temp2 from ' + @TableName + ' where '
bert651153338 2013-07-09
  • 打赏
  • 举报
回复
引用 1 楼 shmilywcd 的回复:
不在同一个会话里, 你可以先创建好 临时表,在动态SQL里 插入数据
能贴一下代码吗? 很少写这东西。。
KevinLiu 2013-07-09
  • 打赏
  • 举报
回复
使用Globale TEMP TABLE ## 或者先创建TEMP TABLE然后再插入数据。
天-笑 2013-07-09
  • 打赏
  • 举报
回复
不在同一个会话里, 你可以先创建好 临时表,在动态SQL里 插入数据

34,576

社区成员

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

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