Asp.net 不同环境下的SQL查询结果不同

Asp.net 不同环境下的SQL查询结果不同,asp.net,sql,sql-server,visual-studio-2010,Asp.net,Sql,Sql Server,Visual Studio 2010,表中有21行。2011年7个,2012年7个,2013年7个。我想得到最近一年的7排 SELECT S1, S2, S1 * S2 AS M FROM BLGND WHERE DID = @dID AND PMID = @pmID AND yearr IN (SELECT MAX(yearr) AS y FROM BLGND AS BLGND_1) 我在MS Visual Studio环境中成功地使用上面的查询获取了最近一年的行。但当我在ASP.NET页

表中有21行。2011年7个,2012年7个,2013年7个。我想得到最近一年的7排

SELECT S1, S2, S1 * S2 AS M 
FROM   BLGND
WHERE  DID = @dID AND 
       PMID = @pmID AND 
       yearr IN (SELECT MAX(yearr) AS y FROM BLGND AS BLGND_1)
我在MS Visual Studio环境中成功地使用上面的查询获取了最近一年的行。但当我在ASP.NET页面中运行查询时,它会显示所有21条记录

换句话说,从BLGND AS BLGND_1中选择MaxYear作为y的Year没有区别

Year列的类型为int

有什么问题吗?或者您知道有更好的查询吗?

您只需编写

SELECT S1, S2, S1 * S2 AS M 
FROM   BLGND
WHERE  DID = @dID AND 
       PMID = @pmID AND 
       YEAR([fieldWithDate]) = @yearRequested
其中,fieldWithDate被假定为一个smalldatetime或datetime字段,您希望从中获取年份值,@yearRequested是一个参数,您可以从代码传递到查询。 您可以使用T-SQL函数提取年份值

当然,如果要搜索年份值的字段只是一个包含行的年份值的整数,则查询更简单

SELECT S1, S2, S1 * S2 AS M 
FROM   BLGND
WHERE  DID = @dID AND 
       PMID = @pmID AND 
       fieldWithYearValue = @yearRequested
如果您不想传递该年的参数,而只想始终检索特定用户上一年的行集,那么

SELECT S1, S2, S1 * S2 AS M 
FROM   BLGND
WHERE  DID = @dID AND 
       PMID = @pmID AND 
       fieldWithYearValue = (SELECT MAX(fieldWithYearValue) FROM BLGND)

当你知道年份,而你只希望搜索一年的时候,为什么要使用IN子句呢?顺便问一下,我认为YEAR是一个保留字YEAR数据类型是什么?仅使用[year]=从BLGND中选择MAX[year]是否会产生任何差异从ASP.NET执行查询时,您一定犯了一些错误,尽管您可以使用=而不是在where中。如果查询执行正确,则差异可能与有关查询的ANSI设置有关,例如NULL处理等,其中VS和ASP.NET的默认值可能不同。@Steve我自己的查询中没有这一年。我这样做只是为了避免本地化。字段年份实际上不是年份。如果我从BLGND AS BLGND_1运行SELECT MAX[year]AS y,它在一行中得到2013年。r列是一个整数。这样更好,不需要使用year函数,只是a,其中a=@param和param是2013年、2012年、2011年或您搜索的任何年份的值,但每年一些用户可能会输入我无法控制的新记录,我不理解。如果不是7条记录,而是8条、9条或10条,则此查询也会检索它们。当然,如果遵守DID和PMID条件,则用户只需填写7个键,并且只能输入7个值。既不少也不多。