为什么存储过程返回datetime但查询返回日期?

时间:2014-03-18 22:55:55

标签: sql sql-server datetime stored-procedures

我有一个存储过程,除其他外,还返回一个日期字段(注意:我最近从datetime字段更改了此字段)。当我运行存储过程时,它仍然将该字段作为datetime返回。即使我创建了一个新的存储过程,它仍然返回datetime而不是date。为什么?一个简单的查询只返回日期(这就是我想要的)。为了让事情变得陌生,在SSMS中运行sp可以得到我想要的结果。但是,从visual studio连接运行sp会给我额外的时间(如下面的几个步骤所示)。

SP:

ALTER PROCEDURE dbo.get_steps_detail
@proj_id int
AS
BEGIN
    SET NOCOUNT ON
    SELECT        step_date, step_stat
    FROM            steps_table 
    WHERE proj_id = @proj_id ORDER BY step_num 
END

像这样返回

Running [dbo].[get_steps_detail] ( @proj_id = 1 ).

step_date                      step_stat                                                                                                                                                                                                                                                             
------------------------------ --------------------------------------------------------- 
2014-02-06 00:00:00.0000000    1     
2014-01-30 00:00:00.0000000    1     
2014-01-30 00:00:00.0000000    1                                                                                                                                                                                                                                        
2014-01-30 00:00:00.0000000    1                                                                                                                                                                                                                                                                                          
No rows affected.
(4 row(s) returned)
@RETURN_VALUE = 0
Finished running [dbo].[get_steps_detail].

然而,如果我运行一个简单的查询:

SELECT        step_date, step_stat
FROM            steps_table
WHERE        (proj_id = 1)
ORDER BY step_num

我只想了日期

2/6/2014    1
1/30/2014   1
1/30/2014   1
1/30/2014   1

'step_date'列明确定义为'Date'(而非datetime)类型。我在这里错过了什么?我正在使用SQL Server 2008 R2 Express。我也试过停止并启动服务器,但这似乎没有任何帮助。我是否需要做任何事情来“刷新”存储过程?事实上,即使我把它改成了这个

SELECT CAST(step_date AS DATE) ...

我仍然可以在visual studio结果集和我的网络应用程序中添加额外的时间(为此btw转为缓存)。这是一些SQL错误吗?

1 个答案:

答案 0 :(得分:1)

这里的总体解决方法,但我现在最终这样做了:

SELECT DATEPART(year, step_date) AS step_date_year, DATEPART(month, step_date) AS step_date_month, DATEPART(day, step_date) AS step_date_day

然后将三者合并在他们的控制之中

<asp:Label ID="Label1" runat="server" ><%# Eval("step_date_year")%> - <%# Eval("step_date_month")%> - <%# Eval("step_date_day")%></asp:Label>

对于这么简单的事情,似乎真的很笨重,但是从好的方面来说,我现在可以选择在月份日期和年份之间使用“/”,“:”或“ - ”