Nano Hash - криптовалюты, майнинг, программирование

VBScript/SQL Server запускается до точки, затем возвращает синтаксическую ошибку в определенной строке

не уверен, сколько информации я могу предоставить, так как это живая конфиденциальная база данных.

Я восстанавливаю код своих предшественников.

Существует файл VBS, который проверяет электронные письма из таблицы 1, использует оператор разделения после «@» для получения домена, а затем проверяет, существует ли этот домен в других таблицах. Если это так, извлеките некоторые поля из этих совпадающих таблиц, а затем обновите третью таблицу, в которой совпадает адрес электронной почты.

Насколько я могу судить, один из массивов/таблиц, созданных для сопоставления, имеет длину 20 000 записей. Однако сценарий запускается, а затем завершается с ошибкой по определенному адресу электронной почты/номеру записи, ссылаясь на неверный синтаксис рядом с 's'.

Опять же, не слишком хорошо знаком с vbscript и довольно ржавый с моим SQL. Может кто подскажет в чем может быть проблема? Думал, что это проблема времени ожидания запроса, но на сервере не установлено ограничение времени для запросов.

Скрипт ниже:

'START - Delete
set rsDelete = conn.execute("DELETE FROM JofTest_emailTrackDump")
set rsDelete = nothing
'END - Delete

'START - Update
set rsUpdate = conn.execute("INSERT INTO JofTest_emailTrackDump (emailTrack_email) SELECT DISTINCT emailIP_emailAddress AS emailTrack_email FROM JofTest_emailIP WHERE emailIP_emailAddress <> '' AND emailIP_hide = 0 AND emailIP_emailAddress IS NOT NULL AND emailIP_emailAddress NOT IN (SELECT DISTINCT emailIP_emailAddress2 FROM ((SELECT DISTINCT rec_email_company AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_company <> '' AND rec_email_company IS NOT NULL) UNION (SELECT DISTINCT rec_email_direct AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_direct <> '' AND rec_email_direct IS NOT NULL) UNION (SELECT DISTINCT rec_email_additional AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_additional <> '' AND rec_email_additional IS NOT NULL) UNION (SELECT DISTINCT contact_email_primary AS emailIP_emailAddress2 FROM JofTest_crm_contacts_masters WHERE contact_email_primary <> '' AND contact_email_primary IS NOT NULL) ) A) ORDER BY emailIP_emailAddress ")
set rsUpdate = nothing
'END - Update

'START - Find Partial Match
set rsPartialList = conn.execute("SELECT DISTINCT emailIP_emailAddress AS emailTrack_email FROM JofTest_emailIP WHERE emailIP_emailAddress <> '' AND emailIP_hide = 0 AND emailIP_emailAddress IS NOT NULL AND emailIP_emailAddress NOT IN (SELECT DISTINCT emailIP_emailAddress2 FROM ((SELECT DISTINCT rec_email_company AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_company <> '' AND rec_email_company IS NOT NULL) UNION (SELECT DISTINCT rec_email_direct AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_direct <> '' AND rec_email_direct IS NOT NULL) UNION (SELECT DISTINCT rec_email_additional AS emailIP_emailAddress2 FROM JofTest_crm_company_master WHERE rec_email_additional <> '' AND rec_email_additional IS NOT NULL) UNION (SELECT DISTINCT contact_email_primary AS emailIP_emailAddress2 FROM JofTest_crm_contacts_masters WHERE contact_email_primary <> '' AND contact_email_primary IS NOT NULL) ) A) ORDER BY emailIP_emailAddress")
while not rsPartialList.eof

    'START - Make Host
    if instr(rsPartialList("emailTrack_email"), "@") > -1 then

        arrHost = split(rsPartialList("emailTrack_email"), "@")

        if ubound(arrHost) > 0 then

            emailAddressHost = arrHost(1)

            'START - Find Partial Match
            set rsFindPartial = conn.execute("SELECT rec_id, rec_company FROM crm_company_masters LEFT JOIN crm_contacts_masters ON contact_recID = rec_id WHERE (rec_email_company LIKE '%" & emailAddressHost & "' OR rec_email_direct LIKE '%" & emailAddressHost & "' OR rec_email_additional LIKE '%" & emailAddressHost & "' OR contact_email_primary LIKE '%" & emailAddressHost & "')")
            if not rsFindPartial.eof then

                'START - Update Dump With Partial Match Info
                set rsUpdatePartial = conn.execute("UPDATE emailTrackDump SET emailTrack_partialRecID = " & rsFindPartial("rec_id") & ", emailTrack_partialCompany = '" & rsFindPartial("rec_company") & "' WHERE emailTrack_email = '" & rsPartialList("emailTrack_email") & "'")

                'END - Update Dump With Partial Match Info

                varCount = varCount + 1

            end If
            rsFindPartial.close()
            set rsFindPartial = nothing
            'END - Find Partial Match

        end if
    end If
    For Each field In arrHost
   Wscript.Echo field
   Next



    'END - Make Host

rsPartialList.movenext()
wend
rsPartialList.close()
set rsPartialList = nothing
'END - Find Partial Match

'Close Connection
conn.close()
set conn = nothing

Сбой происходит в строке 33, символ 17 set rsUpdatePartial = conn.execute("UPDATE email....

РЕДАКТИРОВАТЬ - также, удалив части, я смог запустить код. Фрагмент, который я удалил, был разделом под названием Update Dump with Partial Match Info, поэтому я должен предположить, что ошибка находится внутри него.


  • Возможно, у вас есть какие-то странные символы в исходных полях (например, одинарная кавычка), которые сбивают с толку конкатенированную строку. Если бы вы распечатали это, вы бы это увидели. Правильное решение состоит в том, чтобы превратить эту мерзость, основанную на курсоре, в хранимую процедуру. 14.05.2018
  • Вот о чем я думаю, я смотрю на таблицы базы данных, особенно на строку, где она останавливается, и те, что под ней, есть идеи, какая таблица может дать мне данные, которые я ищу? Принимая во внимание, что JofTest_EmailIP содержит около 800 00 неуникальных строк.... 14.05.2018
  • Я бы искал апостроф в ваших данных. Вы делаете что-то вроде somefield = '%" & vbavariable & "%' more sql;" Если эта переменная vba содержит апостроф, то ваш SQL становится все напуганным. Было бы лучше, если бы вы использовали параметры команды здесь, чтобы собрать этот оператор sql, чтобы избежать этого. Или вы можете сделать Replace(emailAddressHost, "'", "''") при помещении этой переменной в оператор sql, чтобы один апостроф был экранирован в строке sql. 14.05.2018
  • Безусловно, самая большая проблема здесь заключается в том, что вы широко открыты для SQL-инъекций. Использование замены, как предлагает @JNevil, - это шутка. Вы не можете решить проблему с заменой символов. Вам нужно использовать параметризованные запросы. Это предотвращает внедрение sql и одновременно устраняет эту проблему. Вы НИКОГДА не должны создавать такую ​​строку и выполнять ее. Мой друг Бобби Тейблс любит такие вещи. bobby-tables.com 14.05.2018
  • Сомнительные данные, вероятно, находятся в поле компании. Вероятно, самый простой способ найти его — добавить эту строку перед строкой Dump with Partial Match Info: Wscript.Echo rsFindPartial("rec_company") & " " & rsPartialList("emailTrack_email") и посмотреть, на чем она падает. Вам следует подумать о том, чтобы переписать это как внутреннюю хранимую процедуру, которая будет работать намного быстрее. 15.05.2018

Ответы:


1

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

Полностью понимаю необходимость избегать такого рода сценариев, и я дружу с маленькими столами Bobby. Как уже говорилось, это код моих предшественников, собранный вместе, чтобы найти соответствующие домены для соответствия GDPR, он просто запускается, чтобы предоставить средству очистки данных список записей для проверки.

Спасибо всем за вашу помощь.

С уважением,

Jl

15.05.2018
Новые материалы

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

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..