У меня есть классическая страница ASP, которая позволяет пользователям искать свойства и страницу результатов, которая затем отправляет письма агентам свойств, которые имеют соответствующие свойства, чтобы сообщить им, что арендаторы заинтересованы в их свойствах.Неверный синтаксис рядом с ключевым словом «SELECT»
Некоторые агенты могут иметь более 1 собственности, и в этом случае агенту требуется только 1 электронное письмо, а не электронное письмо для каждой имеющейся у них собственности.
Я проверил следующий запрос в Management Studio и вернул правильные результаты;
SELECT DISTINCT CustomerEmail
FROM (SELECT ContentID
FROM (SELECT ContentID
FROM VWTenantPropertiesResults
WHERE (ContentStreet = '')
UNION ALL
SELECT ContentID
FROM VWTenantPropertiesResults AS VWTenantPropertiesResults_2
WHERE (ContentTown = 'Hull')
UNION ALL
SELECT ContentID
FROM VWTenantPropertiesResults AS VWTenantPropertiesResults_1
WHERE (ContentPostCode = 'HU7')) AS qi
GROUP BY ContentID
HAVING (COUNT(*) >= 2)) AS q INNER JOIN
VWTenantPropertiesResults AS r ON r.ContentID = q.ContentID
WHERE (r.ContentBedRooms BETWEEN 1 AND 4) AND (r.ContentPrice BETWEEN 50 AND 500)
Однако, когда я запускаю следующий код на странице он возвращает ошибку Неправильный синтаксис около ключевого слова «SELECT»;
rsemailagents.Source = "SELECT DISTINCT CustomerEmail"
rsemailagents.Source = rsemailagents.Source& "FROM ("
rsemailagents.Source = rsemailagents.Source& " SELECT ContentID"
rsemailagents.Source = rsemailagents.Source& " FROM ("
rsemailagents.Source = rsemailagents.Source& " SELECT ContentID"
rsemailagents.Source = rsemailagents.Source& " FROM VWTenantPropertiesResults"
rsemailagents.Source = rsemailagents.Source& " WHERE ContentStreet = '" & Replace(rspropertyresults__varReqStreet, "'", "''") & "'"
rsemailagents.Source = rsemailagents.Source& " UNION ALL"
rsemailagents.Source = rsemailagents.Source& " SELECT ContentID"
rsemailagents.Source = rsemailagents.Source& " FROM VWTenantPropertiesResults"
rsemailagents.Source = rsemailagents.Source& " WHERE ContentTown = '" & Replace(rspropertyresults__varReqTown, "'", "''") & "'"
rsemailagents.Source = rsemailagents.Source& " UNION ALL"
rsemailagents.Source = rsemailagents.Source& " SELECT ContentID"
rsemailagents.Source = rsemailagents.Source& " FROM VWTenantPropertiesResults"
rsemailagents.Source = rsemailagents.Source& " WHERE ContentTrimmedPostCode LIKE '" & Replace(varPostcode, "'", "''") & "%'"
rsemailagents.Source = rsemailagents.Source& " ) qi"
rsemailagents.Source = rsemailagents.Source& " GROUP BY"
rsemailagents.Source = rsemailagents.Source& " ContentID"
rsemailagents.Source = rsemailagents.Source& " HAVING COUNT(*) >= 2"
rsemailagents.Source = rsemailagents.Source& " ) q "
rsemailagents.Source = rsemailagents.Source& "JOIN VWTenantPropertiesResults r "
rsemailagents.Source = rsemailagents.Source& "ON r.ContentID = q.ContentID "
rsemailagents.Source = rsemailagents.Source& "WHERE ContentBedrooms BETWEEN " & Replace(rspropertyresults__varBedroomsNoMin, "'", "''") & " "
rsemailagents.Source = rsemailagents.Source& "AND " & Replace(rspropertyresults__varBedroomsNoMax, "'", "''") & " "
rsemailagents.Source = rsemailagents.Source& "AND ContentPrice BETWEEN " & Replace(rspropertyresults__varPriceMin, "'", "''") & " "
rsemailagents.Source = rsemailagents.Source& "AND " & Replace(rspropertyresults__varPriceMax, "'", "''") & " " & varSQL & " "
Я задавался вопросом, есть ли у кого-нибудь идеи о том, почему DISTINCT не будет работать в коде?
спасибо.
Попробуйте распечатать rsemailagents.Source и сравните с запросом, который вы протестировали в Management Studio –
Вы также должны увидеть SQL, который отправляется на сервер, который будет выполнен с использованием SQL Profiler. Получите текстовые данные и попробуйте запустить его в SSMS –