2009-09-23 43 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語句中缺少單引號。

相關問題