首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL存储过程动态拼接SQL,INTO 实表改临时表,该怎么解决

2012-04-17 
SQL存储过程动态拼接SQL,INTO 实表改临时表如我有存储过程set @sql1 SELECT 大类名称,COUNT(*) 款色数I

SQL存储过程动态拼接SQL,INTO 实表改临时表
如我有存储过程
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)

[解决办法]

探讨

可以使用临时表.而且在临时表只在本次会话中起作用.所以多用户同时操作,不受影响.

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
J……

[解决办法]
探讨
可以使用临时表.而且在临时表只在本次会话中起作用.所以多用户同时操作,不受影响.

[解决办法]
探讨
=。= 我快哭了。。。。。 动态SQL里面不能使用临时表呀。。。。。。

热点排行