我有一个存储过程,除其他外,还返回一个日期字段(注意:我最近从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错误吗?
答案 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>
对于这么简单的事情,似乎真的很笨重,但是从好的方面来说,我现在可以选择在月份日期和年份之间使用“/”,“:”或“ - ”