日期:2014-05-17  浏览次数:20939 次

临时表 不存在。。。。
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 行受影响)


                求高手帮看看。。。。
SQL

------解决方案--------------------
变成全局表:
set @sql ='select top 1 ' + @Fields + ' into ##temp1 from ' + @TableName + ' where '
set @sql2 = 'select ' + @Row + ' ' + @Fields + ' into ##temp2 from ' + @TableName + ' where '