2009-09-23 42 views
1

我有一个经典的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不会在代码中工作?

谢谢。

+0

尝试打印rsemailagents.Source并与您在Management Studio中测试的查询进行比较 – 2009-09-23 14:24:12

+0

您还应该能够看到发送到服务器的SQL以使用SQL Profiler执行。获取文本数据并尝试在SSMS中运行 – 2009-09-23 14:28:23

回答

5

在此行的末尾将一个空间字符串中

变化

rsemailagents.Source = "SELECT DISTINCT CustomerEmail" 

这个

rsemailagents.Source = "SELECT DISTINCT CustomerEmail " 
+0

嘿,伙计们,感谢您发现空间问题。无法相信我一直在查看这段代码的时间。我需要休息。大声笑。 由于某些原因,它仍然向每个电子邮件地址发送多份电子邮件。 :( – doubleplusgood 2009-09-23 14:47:46

+0

我建议打开一个单独的问题,以避免使已有的答案无效。 – JohnFx 2009-09-23 14:50:51

2
rsemailagents.Source = "SELECT DISTINCT CustomerEmail" 

需要有一个空白客户电子邮件后面

rsemailagents.Source = "SELECT DISTINCT CustomerEmail " 
2

我没有看全的东西,但在第一行的末尾,空间是缺少:-)

我觉得它更容易在开始每行添加空格,因为你可以很容易地看到它是否丢失。当然,它仍然是丑陋的代码,像往常一样,把sql语句放在一起就像这样。

0

您显示的SQL代码与ASP代码呈现的内容之间存在差异。你应该从ASP页面输出代码来看看发生了什么。

在%符号前面的LIKE语句中缺少单引号。

相关问题