WHILE ( @@FETCH_STATUS = 0 /*AND @i < 1000*/ )
BEGIN
--SET @i = @i +1
--取下一个action信息,
FETCH NEXT FROM MYCUR
INTO @ACTIONID,@CASEID,@STARTTIME,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULEIF EXISTS( SELECT 1 FROM @TMAP WHERE CASEID = @CASEID )--老CASE新ACTION
BEGIN
UPDATE #T SET ENDTIME = @STARTTIME
WHERE CASEID = @CASEID AND ENDTIME IS NULL
IF EXISTS( SELECT 1 FROM TS_CHANGEACTIONS WHERE TS_ID = @ACTIONID AND TS_TRANSITIONLABEL LIKE '%close%' )
BEGIN
DELETE FROM @TMAP WHERE CASEID = @CASEID
END
ELSE
BEGIN
INSERT INTO #T VALUES (@ACTIONID,@CASEID,@STARTTIME,NULL,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULE) END
END
ELSE --新CASE,新ACTION
BEGIN
INSERT INTO #T VALUES (@ACTIONID,@CASEID,@STARTTIME,NULL,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULE)
INSERT INTO @TMAP VALUES(@CASEID)
ENDEND
其中红色是说那个table,#T是临时table。@TMAP是table variable(我想用它实现类似STL中的MAP功能),
TS_CHANGEACTIONS是主要的表,其中包含约600万记录,我这里贴出部分,其他就是cursor,DECLARE等,执行起来很慢看看是不是可以有些语句方面的优化?
不胜感激:)
BEGIN
--SET @i = @i +1
--取下一个action信息,
FETCH NEXT FROM MYCUR
INTO @ACTIONID,@CASEID,@STARTTIME,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULEIF EXISTS( SELECT 1 FROM @TMAP WHERE CASEID = @CASEID )--老CASE新ACTION
BEGIN
UPDATE #T SET ENDTIME = @STARTTIME
WHERE CASEID = @CASEID AND ENDTIME IS NULL
IF EXISTS( SELECT 1 FROM TS_CHANGEACTIONS WHERE TS_ID = @ACTIONID AND TS_TRANSITIONLABEL LIKE '%close%' )
BEGIN
DELETE FROM @TMAP WHERE CASEID = @CASEID
END
ELSE
BEGIN
INSERT INTO #T VALUES (@ACTIONID,@CASEID,@STARTTIME,NULL,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULE) END
END
ELSE --新CASE,新ACTION
BEGIN
INSERT INTO #T VALUES (@ACTIONID,@CASEID,@STARTTIME,NULL,@PRIORITY,@ACCOUNT,
@ROLENAME,@PRODUCT,@MODULE)
INSERT INTO @TMAP VALUES(@CASEID)
ENDEND
其中红色是说那个table,#T是临时table。@TMAP是table variable(我想用它实现类似STL中的MAP功能),
TS_CHANGEACTIONS是主要的表,其中包含约600万记录,我这里贴出部分,其他就是cursor,DECLARE等,执行起来很慢看看是不是可以有些语句方面的优化?
不胜感激:)
我用游标是想处理取出的每条记录,那么有什么方法可以避开游标吗
我想实现这样的问题:input,table
output newtable
现在我想update一些行中某个字段,比如time字段,这个time字段要依赖本表table中的其他某一个行
所以我用cursor来做这个事情,读到某一行,检查其中依赖条件十分成立如果成立,则修改table中另一行的time字段。
除了CURSOR还有其他办法可以实现吗,大家理解我的需求吗,我不知道是否表述的清楚。
cursor不就是为了处理行吗谢谢
则
update tb set time=xx