Ошибка зацикливания таблицы и удаления строк - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать сценарий SQL для циклического перемещения по таблице и проверки наличия поля AppID в другой таблице.Затем, если он находит запись в другой таблице, он удаляет строку и устанавливает переменную, удаляет она или нет.

До сих пор я создал цикл, и он устанавливает переменную, если находит запись, однако я пыталсядобавить оператор удаления, и он выдаёт сообщение об ошибке «Неверный синтаксис рядом с« ELSE »»

Use APTLive
Go

declare @RowNum int, @CustId nchar(5), @Name1 nchar(25)
declare @ProdCount int
declare @PROD nchar(5)
select @CustId=MAX(ID) FROM TempAppTable     --start with the highest ID
Select @RowNum = Count(*) From TempAppTable      --get total number of records
WHILE @RowNum > 0                          --loop until no more records
BEGIN   
select @Name1 = AppID from TempAppTable where ID = @CustID    --get other info from that row
select @ProdCount = Count(*) from ProductType where AppRefID = @Name1    --GET APP COUNT ProductType

print cast(@RowNum as char(12)) + ' ' + @Name1 + ' ' + cast(@ProdCount as char(3)) 

If @ProdCount    > 0    SET @PROD = 'Y'  DELETE FROM ProductType    WHERE AppRefID = @Name1     ELSE SET @PROD = 'N'


select top 1 @CustId=ID from TempAppTable where ID < @CustID order by ID desc
    set @RowNum = @RowNum - 1
END

Может кто-нибудь сообщить мне, почему я получаю эту ошибку?Это потому, что IF может выполнять только одну задачу, когда возвращает true или false?

1 Ответ

0 голосов
/ 25 июня 2019

Вы пропустили BEGIN & END для вашего условия IF, так как ваш IF содержит более ОДНОЙ инструкции, вам нужно иметь BEGIN & END в кодовом блоке

Use APTLive
Go

declare @RowNum int, @CustId nchar(5), @Name1 nchar(25)
declare @ProdCount int
declare @PROD nchar(5)
select @CustId=MAX(ID) FROM TempAppTable     --start with the highest ID
Select @RowNum = Count(*) From TempAppTable      --get total number of records
WHILE @RowNum > 0                          --loop until no more records
BEGIN   
select @Name1 = AppID from TempAppTable where ID = @CustID    --get other info from that row
select @ProdCount = Count(*) from ProductType where AppRefID = @Name1    --GET APP COUNT ProductType

print cast(@RowNum as char(12)) + ' ' + @Name1 + ' ' + cast(@ProdCount as char(3)) 

If @ProdCount    > 0    
BEGIN   -- [Added Mjoy]
   SET @PROD = 'Y'   
   DELETE FROM ProductType    WHERE AppRefID = @Name1     
END     -- [Added Mjoy]
ELSE SET @PROD = 'N'


select top 1 @CustId=ID from TempAppTable where ID < @CustID order by ID desc
    set @RowNum = @RowNum - 1
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...