我讀過「如果你在sql中使用循環,你可能做錯了」,這導致我在這裏。在這個問題之前,還有一些背景。我有以下的數據庫結構:替代SQL中的「循環」?
- 「用戶」 具有:
- 用戶ID INT IDENTITY(PK)
- 可靠性浮子
- 「UserSubmissions」 具有:
- 值浮(FK)(PK)
- SubmissionID(FK)(PK)
- 時間戳的日期時間(PK)
- 「GlobalSubmissions」 具有:
- IdealValue浮
- SubmissionID(PK)
思考的GlobalSubmissions作爲一個表格,其中包含用戶理想的理想值,用戶應該提交。 UserSubmissions是一個包含用戶提交的值的表格。
我寫了通過比較用戶的「提交」 s到一個單一的,特定的「globalSubmission」估計用戶的可靠性的功能:
CREATE FUNCTION dbo.GetUserReliabilityForSubmission(@userID int, @submissionID int)
RETURNS float
AS
BEGIN
DECLARE @userAverageValue float,
@idealValue float;
SET @userAverageValue = (
SELECT AVG (Value)
FROM UserSubmissions
WHERE (UserID = @userID AND SubmissionID = @submissionID));
SET @idealValue = (
SELECT IdealValue
FROM Submission
WHERE (SubmissionID = @submissionID));
RETURN 1 - ABS(@userAverageValue - @idealValue);
END
這工作,但它計算用戶的基於可靠性只有一個特定的提交ID。如果我想計算用戶的「全局」可靠性,我需要使用一個循環遍歷用戶提交過的所有不同的SubmissionID,並在其上運行該過程。
在這種情況下是否有一個很好的選擇使用循環?
程序是否返回您期望的內容?我對WHERE(UserID = @userID AND SubmissionID = @submissionID)條件中使用'@ submissionID'有點懷疑...... – dasblinkenlight 2013-03-16 11:24:41