我有一个经典的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中测试的查询进行比较 – 2009-09-23 14:24:12
您还应该能够看到发送到服务器的SQL以使用SQL Profiler执行。获取文本数据并尝试在SSMS中运行 – 2009-09-23 14:28:23