如我有存储过程
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里面不能用临时表还是怎么的。
求解决方案
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里面不能用临时表还是怎么的。
求解决方案
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)
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这样就可以