DECLARE @SQL NVARCHAR(2000)
--按地区得到各地区满意度调查3种不同结果出现的次数
set @SQL='select AreaId,Max(AreaName) AS AreaName,Replace(CustomerSatisfaction,'''','''') As CustomerSatisfaction,count(SurveryFilesId) As Score into #t from vw_SurveyInfoForArea 
Where AreaName is not null  AND StatusCode=1 AND DeletionStateCode=0 AND AreaDeletionStateCode=0 AND DATEDIFF(MONTH,SurveryMonth,''2008-01-01'')=0 AND DealerId=16 Group By AreaId,Replace(CustomerSatisfaction,'''','''')'

Exec sp_executesql @SQL
select * from #t
以上语句运行时报如下错误:(所影响的行数为 3 行)服务器: 消息 208,级别 16,状态 1,行 7
对象名 '#t' 无效。
哪位大侠帮忙指点一下?

解决方案 »

  1.   


    set @SQL=N'select AreaId,Max(AreaName) AS AreaName,Replace(CustomerSatisfaction,'''','''') As CustomerSatisfaction,count(SurveryFilesId) As Score into #t from vw_SurveyInfoForArea 
    Where AreaName is not null  AND StatusCode=1 AND DeletionStateCode=0 AND AreaDeletionStateCode=0 AND DATEDIFF(MONTH,SurveryMonth,''2008-01-01'')=0 AND DealerId=16 Group By AreaId,Replace(CustomerSatisfaction,'''','''') +
    select * from #t '
        
      

  2.   


    set @SQL=N'select AreaId,Max(AreaName) AS AreaName,Replace(CustomerSatisfaction,'''','''') As CustomerSatisfaction,count(SurveryFilesId) As Score into #t from vw_SurveyInfoForArea 
    Where AreaName is not null  AND StatusCode=1 AND DeletionStateCode=0 AND AreaDeletionStateCode=0 AND DATEDIFF(MONTH,SurveryMonth,''2008-01-01'')=0 AND DealerId=16 Group By AreaId,Replace(CustomerSatisfaction,'''','''') 
    select * from #t '
      

  3.   

    没有别的办法吗?
    非要把select * from #t 写在里面吗?
      

  4.   

    select * from #t不能使用动态语句里面的东西。只能写在里面
      

  5.   

    我以前也碰到过这个问题,根据某位老大的解释,似乎动态执行的SQL语句具有独立的session,即在该session内创建的对象(这里表现为临时表),其生命周期也仅限于该session