SQL завис на и еще синтаксическая ошибка - PullRequest
0 голосов
/ 28 августа 2018

Я столкнулся с синтаксической ошибкой ELSE и был бы очень признателен за второй набор глаз, чтобы показать мне, что не так! Я использую SSMS v17.3. Я получаю сообщение:

Сообщение 156, Уровень 15, Состояние 1, Строка 98

Неверный синтаксис рядом с ключевым словом «ELSE».

Строка 98 является последним ELSE перед выходом. Примерно на 6 строк выше конца всего утверждения. Заранее благодарю!

DECLARE @GroupID uniqueidentifier
DECLARE @fCompID int
DECLARE @fPropID int
DECLARE @fCompGUID uniqueidentifier

Set @GroupID = 'E63DC5E7-C8C8-4EA3-B1BF-75712DD83EF4'
SET @fCompID = '0'
SET @fPropID = '0'

WHILE @fCompID <= '999'
    BEGIN
    IF @fCompID = (SELECT fID FROM tSCCompany WHERE fID = @fCompID)
        SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID)
        WHILE @fPropID <='999'
            BEGIN
            IF @fPropID = (SELECT fID FROM tSCProperty WHERE fID = @fPropID AND fCompanyID = @fCompGUID)
                BEGIN
                INSERT INTO zPropTest(fGroupID, fPropertyID)
                    Select @GroupID, (select fPropertyID from tSCProperty where fID = @fPropID AND fCompanyID = @fCompGUID)
                SET @fPropID = @fPropID + 1
                END
            ELSE
                BEGIN
                SET @fPropID = @fPropID + 1
                END
            END
    ELSE
        BEGIN
        SET @fCompID = @fCompID + 1
        SET @fPropID = '0'
        END
    END
GO

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Кажется, вам не хватает одного из начальных блоков. Пожалуйста, попробуйте как ниже:

DECLARE @GroupID uniqueidentifier
DECLARE @fCompID int
DECLARE @fPropID int
DECLARE @fCompGUID uniqueidentifier

Set @GroupID = 'E63DC5E7-C8C8-4EA3-B1BF-75712DD83EF4'
SET @fCompID = '0'
SET @fPropID = '0'
BEGIN-- MISSING!!
WHILE @fCompID <= '999'
    BEGIN
    IF @fCompID = (SELECT fID FROM tSCCompany WHERE fID = @fCompID)

        SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID)
        WHILE @fPropID <='999'
            BEGIN
            IF @fPropID = (SELECT fID FROM tSCProperty WHERE fID = @fPropID AND fCompanyID = @fCompGUID)
                BEGIN
                INSERT INTO zPropTest(fGroupID, fPropertyID)
                    Select @GroupID, (select fPropertyID from tSCProperty where fID = @fPropID AND fCompanyID = @fCompGUID)
                SET @fPropID = @fPropID + 1
                END
            ELSE
                BEGIN
                SET @fPropID = @fPropID + 1
                END
            END
      END-- MISSING
    ELSE
        BEGIN
        SET @fCompID = @fCompID + 1
        SET @fPropID = '0'
        END
    END
GO
0 голосов
/ 28 августа 2018

Добро пожаловать в переполнение стека!

Вам нужны индикаторы блока для вашего оператора If. Смотрите две строки, которые я добавил

DECLARE @GroupID uniqueidentifier
DECLARE @fCompID int
DECLARE @fPropID int
DECLARE @fCompGUID uniqueidentifier

Set @GroupID = 'E63DC5E7-C8C8-4EA3-B1BF-75712DD83EF4'
SET @fCompID = '0'
SET @fPropID = '0'

WHILE @fCompID <= '999'
    BEGIN
    IF @fCompID = (SELECT fID FROM tSCCompany WHERE fID = @fCompID)
        Begin  --  I added this
            SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID)
            WHILE @fPropID <='999'
                BEGIN
                IF @fPropID = (SELECT fID FROM tSCProperty WHERE fID = @fPropID AND fCompanyID = @fCompGUID)
                    BEGIN
                    INSERT INTO zPropTest(fGroupID, fPropertyID)
                        Select @GroupID, (select fPropertyID from tSCProperty where fID = @fPropID AND fCompanyID = @fCompGUID)
                    SET @fPropID = @fPropID + 1
                    END
                ELSE
                    BEGIN
                    SET @fPropID = @fPropID + 1
                    END
                End
        End  --  I added this, too 
    ELSE
        BEGIN
        SET @fCompID = @fCompID + 1
        SET @fPropID = '0'
        END
    END
GO
0 голосов
/ 28 августа 2018

Я думаю, что вы пропустили ТОП 1

DECLARE @GroupID uniqueidentifier
DECLARE @fCompID int
DECLARE @fPropID int
DECLARE @fCompGUID uniqueidentifier

Set @GroupID = 'E63DC5E7-C8C8-4EA3-B1BF-75712DD83EF4'
SET @fCompID = '0'
SET @fPropID = '0'

WHILE @fCompID <= '999'
    BEGIN
        IF @fCompID = (SELECT fID FROM tSCCompany WHERE fID = @fCompID) -- Need top 1?
            SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID) -- Need top 1?
            WHILE @fPropID <='999'
                BEGIN
                    IF @fPropID = (SELECT fID FROM tSCProperty WHERE fID = @fPropID AND fCompanyID = @fCompGUID) -- Need top 1?
                        BEGIN
                            INSERT INTO zPropTest(fGroupID, fPropertyID)
                                Select @GroupID, 
                                    (select top 1 fPropertyID from tSCProperty 
                                        where fID = @fPropID AND fCompanyID = @fCompGUID)
                            SET @fPropID = @fPropID + 1
                        END
                    ELSE
                        BEGIN
                            SET @fPropID = @fPropID + 1
                        END
                END
        ELSE
            BEGIN
                SET @fCompID = @fCompID + 1
                SET @fPropID = '0'
            END
    END
GO
...