如我有存储过程
set @sql1 = '
SELECT 大类名称,COUNT(*) 款色数 
INTO ZDYB_款色数
 FROM (
SELECT C.大类名称, A.SPDM,A.GG1DM
FROM vw_CKJXCMX A
JOIN SHANGPIN B ON A.SPDM = B.SPDM
JOIN A_商品名称分类 C ON B.SPMC = C.商品名称
WHERE
b.BYZD8 ='+@年份+' AND BYZD5 IN ('+@季节+') AND  a.SPDM = B.SPDM
AND
RQ >='''+@时间前+''' AND RQ <='''+@时间后+''' AND QDDM = '+@渠道+' and a.sl >0
GROUP BY C.大类名称,A.SPDM,A.GG1DM
) ccC
group by 大类名称'
exec (@sql1)
后面用完 表 ZDYB_款色数,就DROP  TABLE ZDYB_款色数了
单独执行没问题,但是现在我这个存储过程要执行30秒左右,因为用的是实表,这30秒就不能用其他用户执行了,会报错,
那怎么解决同时执行的问题呢?
直接把表  ZDYB_款色数  改成 【#ZDYB_款色数】 会报错,好像是动态SQL里面不能用临时表还是怎么的。
求解决方案

解决方案 »

  1.   

    可以使用临时表.而且在临时表只在本次会话中起作用.所以多用户同时操作,不受影响.set @sql1 = '
    SELECT 大类名称,COUNT(*) 款色数  
    INTO #ZDYB_款色数
     FROM (
    SELECT C.大类名称, A.SPDM,A.GG1DM
    FROM vw_CKJXCMX A
    JOIN SHANGPIN B ON A.SPDM = B.SPDM
    JOIN A_商品名称分类 C ON B.SPMC = C.商品名称
    WHERE
    b.BYZD8 ='+@年份+' AND BYZD5 IN ('+@季节+') AND a.SPDM = B.SPDM
    AND
    RQ >='''+@时间前+''' AND RQ <='''+@时间后+''' AND QDDM = '+@渠道+' and a.sl >0
    GROUP BY C.大类名称,A.SPDM,A.GG1DM
    ) ccC
    group by 大类名称'
    exec (@sql1)
      

  2.   

    =。= 我快哭了。。 动态SQL里面不能使用临时表呀
      

  3.   

    动态SQL里可以使用临时表,我一直都用的,大乌龟已经说了,临时表只存在于当前会话,会话结束,临时表将自动删除的
      

  4.   

    declare @sql1 varchar(999)
    set @sql1 = '
    SELECT *
    into #ccccca
     FROM (
    select 1 as col
    union all
    select 2 as col
    ) ccC
    '
    exec (@sql1)
    SELECT * FROM #ccccca
    这样就报错
    declare @sql1 varchar(999)
    set @sql1 = '
    SELECT *
    into ccccca
     FROM (
    select 1 as col
    union all
    select 2 as col
    ) ccC
    '
    exec (@sql1)
    SELECT * FROM ccccca这样就可以