2016-06-27 5 views
0

У меня есть таблица лиги отображается ниже, где все команды играли друг с другом:Если оператор с использованием счета

enter image description here

Основываясь на их LeagueID, я хочу, чтобы определить, что если количество игр достигло БОЛЬШЕ, чем его предел, затем поднимите ошибку, говоря «сезон закончен».

Я немного потеряю заявление IF и нуждаюсь в небольшой помощи в том, как это определить. Я хочу сказать в приведенном ниже примере, что если будет сыграно больше игр, чем 22, поднимите ошибку, но я не хочу использовать фиксированное значение 22, поскольку мне нужно притворяться, что лига может быть расширена в какой-то момент в будущем с большим количеством команд.

Как это можно сделать? В настоящий момент расчет подсчитывает все команды за лигу, умножается на 2, чтобы определить дом и прочь, а затем минус 2, так как каждая команда не играет сама.

CREATE PROCEDURE [dbo].[League_Table_Insert] 
    @LeagueName VARCHAR(30) 
AS 
SET NOCOUNT ON 
BEGIN 

    DECLARE @LeagueID INT 
    DECLARE @TotalMatches INT 

    SELECT 
    @LeagueID = LeagueID FROM dbo.League 
    WHERE LeagueName = @LeagueName 

    SELECT [Position], [TeamName], [Played], [Wins], [Loss], [Draws], [Points], [Goals_Scored], [Goals_Against], [Goal_Difference], [LeagueID] 
    FROM League_Table 
    WHERE LeagueID = @LeagueID 
    ORDER BY Points DESC, Goal_Difference DESC; 

    --select [Position], [TeamName], [Played], [Wins], [Loss], [Draws], [Points], [Goals_Scored], [Goals_Against], [Goal_Difference], [LeagueID] from League_Table 

    SELECT @TotalMatches = SUM(COUNT(*) * 2 - 2) FROM dbo.League_Table WHERE LeagueID = @LeagueID 

     IF >= 
    BEGIN 
     RAISERROR('season finished', 16, 1); 
     RETURN; 
    END 
END 
+0

Почему вы хотите поднять это как ошибка, а не показывать ее как предупреждение. Может не иметь значения для вашего вопроса, но все же –

+0

Почему бы не передать максимальное значение в хранимую процедуру и не установить его в файле конфигурации или что-то еще? –

+0

Я просто использую его, чтобы знать, что заявление работает. В дальнейшем я буду изменять ошибку в инструкции обновления. Вместо ошибки это будет утверждение обновления, чтобы установить все проигранные, точки, разницу мячей и т. Д. Назад 0 –

ответ

0
IF (SELECT MIN(Played) FROM dbo.League_Table WHERE LeagueID = @LeagueID) >= @TotalMatches 

Предполагая, что ваш общий расчет матчей правильно, это имело бы смысл, что если оператор ищет наименьшее количество сыгранных матчей для этой лиги и проверки в отношении общей

Смежные вопросы