【发布时间】:2011-05-09 23:29:52
【问题描述】:
我在完成复杂查询时遇到问题:
SQLString = "SELECT i.CONCOM,
COALESCE(SUM(CASE
WHEN C.CATEGORY_ID = '30' THEN 0
ELSE t.LOGMINS END), 0) AS TotalWithoutNew,
COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId
FROM Inquiry AS i
INNER JOIN TIMELOG AS t ON t.INQUIRY_ID = i.INQUIRY_ID
INNER JOIN PROD AS P ON i.PROD_ID = P.PROD_ID
INNER JOIN CATEGORY AS C ON P.CATEGORY_ID = C.CATEGORY_ID
WHERE (DATEPART(m, ESCDATE) = " & objmonth & ")
AND (DATEPART(y, ESCDATE) = " & objyear & ")
GROUP BY i.CONCOM
ORDER BY concom ASC"
如果没有 where 子句,查询可以正常工作,但是当我将 where 子句放入时,它什么也不返回。 ESCDATE 是一个日期时间字段。一开始我以为它不是传递整数而是字符串,它肯定是传递整数。
进一步在 ASP 脚本中,我使用 Request.Querystring 来获取一个月和一年,我基本上想检查 ESC 日期,它只从指定年份中指定的月份返回结果。
【问题讨论】:
-
如果
ESCDATE上有索引,使用DATEPART将无法使用。 -
您应该使用参数化查询。如果您直接从
Request.Querystring获取这些值并将它们连接到查询中,您将遇到 SQL 注入问题。 -
为了强化@martin的评论,sql注入问题有点大,你不应该忽略它。
标签: sql sql-server tsql asp-classic ado