读书人

小弟我知道这样不好但实在没办法那

发布时间: 2013-04-21 21:18:07 作者: rapoo

我知道这样不好,但实在没办法,那么长的一段东西,求能帮忙的大神

USE [DP6_Siemens]
GO
/****** Object: StoredProcedure [dbo].[Siemens_Confirm_JH] Script Date: 04/09/2013 09:08:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Siemens_Confirm_JH]
@BeginTime VARCHAR(10) ,
@EndTime VARCHAR(10) ,
@Corpid INT
AS
BEGIN

--建立一个临时表,用于存放每天计划任务的内容
CREATE TABLE #abc
(
a VARCHAR(MAX) ,
b VARCHAR(MAX) ,
c VARCHAR(MAX) ,
d INT
)

--循环,求这周JH任务的数量,提取每天编号

DECLARE @Commons INT ,
@index INT ,
@commonid INT ,
@memberid INT
SET @index = 1
SELECT @Commons = COUNT(DISTINCT a.CommonId)
FROM dbo.DP_CommonSmsEntries a
WHERE a.corpid = @Corpid
AND a.RecvTime >= @BeginTime
AND a.RecvTime < @EndTime
AND Instruction = 'JH'

CREATE TABLE #Commons
(
CommonId VARCHAR(50) ,
memberid INT
)
INSERT INTO #Commons
SELECT DISTINCT
CommonId ,
MemberId
FROM DP_CommonSmsEntries a
WHERE a.corpid = @Corpid


AND a.RecvTime >= @BeginTime
AND a.RecvTime < @EndTime
AND Instruction = 'JH'
--select * from #Commons
WHILE @index <= @Commons
BEGIN
SELECT @commonid = CommonId
FROM #Commons
SELECT @memberid = MemberId
FROM dbo.DP_CommonSmsEntries
WHERE CommonId = @commonid
--把每天的JH任务内容放进临时表中
INSERT INTO #abc
SELECT ( SELECT CASE WHEN a.Param1 = b.Code
THEN b.Description
END AS a
FROM dbo.DP_CommonSmsEntries a
LEFT JOIN dbo.DP_Code_Config_Tbl b ON a.CorpId = b.CorpId
AND Field_Order = 2
AND b.Sms_Style_Id = 'JH'


AND a.Param1 = b.Code
LEFT JOIN dbo.DP_Members c ON a.MemberId = c.MemberId
AND a.CorpId = c.CorpId
WHERE c.Status = 2
AND c.RoleId = 7
AND a.CommonId IN ( @commonid )
--AND a.MemberId IN (@memberid)

) AS a ,
( SELECT ',上午'
+ CASE WHEN a.Param2 = b.Code
THEN b.Description
END AS b
FROM dbo.DP_CommonSmsEntries a


LEFT JOIN dbo.DP_Code_Config_Tbl b ON a.CorpId = b.CorpId
AND Field_Order = 3
AND b.Sms_Style_Id = 'JH'
AND a.Param2 = b.Code
LEFT JOIN dbo.DP_Members c ON a.MemberId = c.MemberId
AND a.CorpId = c.CorpId
WHERE c.Status = 2
AND c.RoleId = 7
AND a.CommonId IN ( @commonid )
--AND a.MemberId IN (@memberid)

) AS b ,
( SELECT ',下午'


+ CASE WHEN a.Param4 = b.Code
THEN b.Description
END + '。' AS c
FROM dbo.DP_CommonSmsEntries a
LEFT JOIN dbo.DP_Code_Config_Tbl b ON a.CorpId = b.CorpId
AND Field_Order = 5
AND b.Sms_Style_Id = 'JH'
AND a.Param4 = b.Code
LEFT JOIN dbo.DP_Members c ON a.MemberId = c.MemberId
AND a.CorpId = c.CorpId
WHERE c.Status = 2
AND c.RoleId = 7


AND a.CommonId IN ( @commonid )
--AND a.MemberId IN (@memberid)

) AS c ,
( SELECT a.memberid
FROM dbo.DP_CommonSmsEntries a
WHERE a.CommonId IN ( @commonid )
--AND a.MemberId IN (@memberid)

) AS d
--SELECT * from #abc
-- DELETE #Commons
-- WHERE CommonId = @CommonId
-- SET @index += 1


--END




--插入发送队列表
/** INSERT INTO DP_SmsOutQueue
( CorpId ,
Mobile ,
[Content] ,


SendChannel ,
AttemptTimes ,
Operator

)**/
SELECT @Corpid AS Corpid ,
dbo.GetMobileByMemberId(@memberid) AS Mobile ,
'平台核实:你好,平台已登记你本周的工作计划。'
+ ( SELECT '' + a + b + c
FROM #abc
WHERE #abc.d --IN ( @memberid )
IN (
SELECT DISTINCT
a.MemberId
FROM dbo.DP_CommonSmsEntries a
WHERE a.CommonId IN ( @commonid ) )
FOR
XML PATH('')
) + '祝你工作愉快!' AS CONTENT ,
dbo.GetSmsChannelByMobile(dbo.GetMobileByMemberId(@memberid),
@Corpid) AS SendChannel ,
0 AS AttemptTimes ,
'Siemens_Confirm_JH' AS Operator


DELETE #Commons
WHERE CommonId = @CommonId
SET @index += 1


END

DROP TABLE #abc
DROP TABLE #Commons
END

-- EXEC [dbo].[Siemens_Confirm_JH] '2013-03-20','2013-03-21','1'






上述代码,我想要的效果只有这两条小弟我知道这样不好,但实在没办法,那么长的一段东西,求能帮忙的大神
小弟我知道这样不好,但实在没办法,那么长的一段东西,求能帮忙的大神
但是却出现了很多
小弟我知道这样不好,但实在没办法,那么长的一段东西,求能帮忙的大神
求大神帮忙解决这个循环的问题,我已精疲力尽了小弟我知道这样不好,但实在没办法,那么长的一段东西,求能帮忙的大神 循环 select
[解决办法]
你把这段移出while循环外面去吧。没看到你的insert是注销了
[解决办法]
--把每天的JH任务内容放进临时表中
INSERT INTO #abc
SELECT ( ---我的说明:这内面有问题,因为a,b,c,d没有必然的联系,对不齐的,资料就会多了,有点象行列转换,一行的多列,要有共同的归属!

读书人网 >SQL Server

热点推荐