整容说文库 > 程序代码 > 教育资讯

这样的写存储过程有问题吗?

来源:学生作业帮助网 编辑:整容说文库 时间:2019/11/16 07:41:24 程序代码
这样的写存储过程有问题吗?程序代码

drop procedure dep_jieda

create procedure dep_jieda
(@dep nvarchar(200),
@project nvarchar(200),
@depusr nvarchar(200),
@startdate nvarchar(200),
@enddate nvarchar(200))
AS
exec('select dbo.ts_users.* into #dep_user from dbo.ts_users 
where ts_id in ('+@depusr+')')

exec('SELECT dbo.USR_INCIDENTS.* into #tmp_project
FROM dbo.USR_INCIDENTS
WHERE (TS_SUBDEP = '+@dep+') AND (TS_PROJECTID IN ('+@project+'))')




declare @sql varchar(8000)

set @sql='select ts_title'
select @sql=@sql+','+quotename(b.ts_name+'完成')+'=sum(case when ts_activeinactive=1  and a.ts_xgbumeng='+convert(varchar,b.ts_id)+' then 1 else 0 end),'
    +quotename(b.ts_name+'未完成')+'=sum(case when ts_activeinactive=0 and a.ts_xgbumeng='+convert(varchar,b.ts_id)+' then 1 else 0 end)' 
    from #dep_user b
select @sql=@sql+' from #tmp_project a group by ts_title'
--print @sql
--exec (@sql)
drop table  #tmp_project,#dep_user
go




exec dep_jieda 106,'58,59,60,61,62','24,25,26,27',1142817462,1144029122

报下面的错:


(所影响的行数为 4 行)


(所影响的行数为 2 行)

服务器: 消息 208,级别 16,状态 1,过程 dep_jieda,行 22
对象名 '#dep_user' 无效。


开始要检测#dep_user 是否存在,存在删除后再创建,否则会出现错误。
有#dep_user的地方,直接把#去掉,
局部临时表在会话环境该变的情况下,会出现找不到对象的情况!

你外面的SQL语句和用exec()方法执行时的会话环境就不同!

你将#dep_user 改为全局临时表 ##dep_user 实现。
这样就可以解决问题
同意可可 :)
改成##就可以了。谢谢
程序代码