我正在努力弄清楚如何使用If/Then/Else方案进行更新。游标正在抓取select语句中的记录,然后将它们与链接服务器中的不同表进行比较。然后,如果它找到匹配的记录,请更新光标的计数。如果它找不到匹配的记录,则将该行插入表中。使用If/Then/Else更新游标SQL语句
游标在下方,我当前的更新命令仅用于更新记录找到匹配项的计数。
DECLARE @cono INT
DECLARE @repno NVARCHAR(10)
DECLARE @date DATETIME
DECLARE @count INT
DECLARE cur CURSOR FOR
SELECT '1' AS PPCONO,
b.new_SalesrepId AS PPREP1,
MAX(CONVERT(VARCHAR(8), (d.ScheduledStart - c.TimeZoneBias/CAST(24 * 60 AS FLOAT)), 112)) AS PPDATE,
COUNT(b.new_SalesrepId) AS PPCOUNT,
MAX(CONVERT(VARCHAR(8), (a.ActualEnd - c.TimeZoneBias/CAST(24 * 60 AS FLOAT)), 112)) AS ClosedOn
FROM ActivityPointerBase AS a
join SystemUserExtensionBase AS b ON b.SystemUserId = a.OwnerId
join UserSettingsBase AS c ON c.SystemUserId = b.SystemUserId
join ActivityPartyBase AS d ON d.ActivityId = a.ActivityId
WHERE b.new_SalesrepId <> '99999999'
and a.ActivityTypeCode = '4201'
and b.new_SalesrepId is not NULL
and a.StateCode = '1'
and d.ParticipationTypeMask = '9'
and CONVERT(varchar(8), a.ActualEnd - c.TimeZoneBias/cast(24 * 60 as float), 112) >= dateadd(day,datediff(day,1,CONVERT(varchar(8), GetDate(), 112)),0)
and CONVERT(varchar(8), a.ActualEnd - c.TimeZoneBias/cast(24 * 60 as float), 112) < dateadd(day,datediff(day,0,CONVERT(varchar(8), GetDate(), 112)),0)
/* and CONVERT(VARCHAR(8), a.ActualEnd - c.TimeZoneBias/CAST(24 * 60 AS FLOAT), 112) < CONVERT(VARCHAR(8), GETDATE(), 112) */
group by b.new_SalesrepId,
CONVERT(varchar(8), (d.ScheduledStart - c.TimeZoneBias/cast(24 * 60 as float)), 112)
order by b.new_SalesrepId ASC;
FETCH NEXT FROM cur INTO @cono, @repno, @date, @count
WHILE (@@FETCH_STATUS=0)
BEGIN
UPDATE [AS400].S062f7ar.APLUS83MDS.PEPAPPTS01
SET PPCOUNT = PPCOUNT + @count
WHERE PPCONO = @cono
and PPREP1 = @repno
and PPDATE = @date
FETCH NEXT FROM cur INTO @cono, @repno, @date, @count
END
CLOSE cur
DEALLOCATE cur
不知道如何完成SQL中的IF/Then/Else场景。我做了一点研究,也许使用Case是要走的路,但是你可以使用Update命令来做到这一点吗?我在SQL 2008上。
这是一个动态CRM数据库? – Donal 2014-10-05 18:14:43
是的。 MSCRM 2011 – 2014-10-05 18:16:01
什么是主键列在 – 2014-10-05 18:19:51