Что я делаю не так с использованием цикла в SQL - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно сравнить электронные письма из таблиц, и если они совпадают, мне нужно показать некоторые данные из третьей таблицы, и я пытаюсь сделать это через цикл while, который просматривает строку всех электронных писем и сравнивает их, и еслисовпадение должно получить данные из третьей таблицы

Я вставляю запрос из pastebin здесь: https://pastebin.com/zyjcJngf

Часть, где я хочу использовать цикл

select distinct Email,
CASE dbo.spValueToString((SELECT COUNT(*) 
    FROM tblEmailBlackList WHERE tblEmailBlackList.Email=LiveCampaign_SubscriberList_Email.Email AND tblEmailBlackList.PortalID>=-1))
WHEN 'Da' THEN

    WHILE @vsi > 1
    BEGIN
        SET @testEmail = (SELECT LEFT(@resultCpy, CHARINDEX(',', @resultCpy) - 1)) --dobi prvi mail
        SET @testEmail = (SELECT REPLACE(@testEmail, ' ', '')) --zbriše vse ' ' če obstajajo
        SET @resultCpy = (SELECT SUBSTRING(@resultCpy, LEN(@testEmail) + 2, LEN(@resultCpy))) --odstani prvi mail
        IF      
            @testEmail = Email
            BREAK
        ELSE
            SET @vsi = @vsi - 1
    END
    SET @vsi = (SELECT LEN(@result) - LEN(REPLACE(@result, ',', '')) + 1)
    SET @resultCpy = @result

    (SELECT DISTINCT PortalLocalization.PortalName
    FROM tblEmailBlackList
    LEFT JOIN tblLiveCampaignSettings ON tblLiveCampaignSettings.ModuleID = tblEmailBlackList.ModuleID
    LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = tblEmailBlackList.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
    WHERE Email = @testEmail
    AND tblEmailBlackList.PortalID >= 0
    UNION
    SELECT DISTINCT PortalLocalization.PortalName
    FROM tblEmailBlackList
    LEFT JOIN vw_TabModules ON vw_TabModules.ModuleID = tblEmailBlackList.ModuleID
    LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = vw_TabModules.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
    WHERE Email = @testEmail
    AND tblEmailBlackList.PortalID = -1)    
ELSE 'Ne' END
AS LocalBlockList
FROM LiveCampaign_SubscriberList_Email

Проблема, с которой я столкнулся, заключается в том, что я получаю ошибку, когда добавляю цикл в код, но если я запускаю цикл один, он работает.Я получил неправильный синтаксис рядом с WHILE, и не удалось связать многоэлементный идентификатор "LiveCampaign_SubscriberList_Email.Email".

1 Ответ

0 голосов
/ 03 апреля 2019

Вы не можете поместить WHILE в оператор SELECT.

Попробуйте обработать ваши данные до SELECT, возможно, во временной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...