SQL Datepart Where子句无效

3

我遇到了一个复杂查询的末尾问题:

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 是一个DATETIME字段。起初我认为它没有传递整数而是字符串,但它确实传递了整数。

在ASP脚本中,我使用Request.Querystring获取月份和年份,并且我希望只检查来自指定年份和月份的ESC日期的结果。


如果在“ESCDATE”上有索引,则使用“DATEPART”将无法使用它。 - OMG Ponies
2
你应该使用参数化查询。如果你直接从 Request.Querystring 中获取这些值并将它们连接到查询语句中,那么你将会遇到 SQL 注入问题。 - Martin Smith
为了强调@martin的评论,SQL注入问题是一个相当严重的问题,你不应该忽视它。 - Joel Coehoorn
1个回答

4
“y”指定符表示的是一年中的第几天,而不是年份。请改用“yy”或“yyyy”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接