먼저, 문제에 대한 일반적인 설명 : 테이블의 총 숫자를 업데이트하는 정기 프로세스를 실행하고 있습니다. 문제는 프로세스를 실행할 때마다 여러 업데이트가 필요할 수 있으며 각 실행은 이전 결과에 따라 달라질 수 있다는 것입니다.select 결과의 각 행에 대해 INSERT 수행
제 질문은 단일 SQL Server SP에서 할 수 있습니까?
는내 코드 (나는 그것을 단순히 샘플을 약간 변경) :
INSERT INTO CustomerMinuteSessions(time, customer, sessions, bytes, previousTotalSessions)
SELECT MS.time,
MS.customer,
MS.totalSessions,
MS.totalBytes,
CTS.previousTotalSessions
FROM (SELECT time, customer, SUM(sessions) as totalSessions, SUM(bytes) AS totalBytes
FROM MinuteSessions
WHERE time > @time
GROUP BY time, x) MS
CROSS APPLY TVF_GetPreviousCustomerTotalSessions(MS.customer) CTS
ORDER BY time
previousTotalSessions
열이 UpdatedTable
에서 다른 행에 따라, 그 값은 CROSS APPLY
이 TVF_GetPreviousCustomerTotalSessions
을 보내고에 의해 검색되지만를 난을 실행할 경우 SP는 그대로, 모든 행은 동안 SP가 실행되는 동안 추가 된 행을 취하지 않고 함수가 검색 한 값을 사용합니다. 여기에 완성도를 위해서
TVF_GetPreviousCustomerTotalSessions
입니다 : FUNCTION [dbo].[TVF_GetCustomerCurrentSessions]
(
@customerId int
)
RETURNS @result TABLE (PreviousNumberOfSessions int)
AS
BEGIN
INSERT INTO @result
SELECT TOP 1 (PreviousNumberOfSessions + Opened - Closed) AS PreviousNumberOfSessions
FROM CustomerMinuteSessions
WHERE CustomerId = @customerId
ORDER BY time DESC
IF @@rowcount = 0
INSERT INTO @result(PreviousNumberOfSessions) VALUES(0)
RETURN
END
은 무엇 최고 (즉, 루프없는 것 같아요 ...) 이후 행에 대한 쿼리 내에서 이전 행을 취할?
SQL 버전? 각 레코드에 증가 세션 수 또는 각 항목의 합계를 저장하려고합니까? – Volvox
@Volvox : 답장 (그리고 내 의견과 편집에 뒤따른 것)에 무슨 일이 일어 났습니까 ?? – ury