我有一个带有DateTime列的表。我使用这样的存储过程更新它:
INSERT INTO table (DateTimeColumn) VALUES (GETDATE())
我已尝试使用CURRENT_TIMESTAMP
,但该列仍将时间显示为00:00:00
我做错了吗?
感谢。
存储过程:
ALTER PROCEDURE [dbo].[StoredProcedure]
@foo(50) = null,
@foo(50) = null,
@foo= null,
@foo(200)= null,
@InsertTS datetime =null,
@foo(50) = null
AS
SET @InsertTS = ISNULL(@InsertTS, GETDATE())
SET @foo = ISNULL(@foo, user)
INSERT INTO table (foo, foo, foo, foo, InsertTS, foo)
VALUES (@foo, @foo, @foo, @foo, @InsertTS, @foo)
答案 0 :(得分:0)
您的SP看起来不错,它会插入正确的日期时间值。确保将正确的日期时间值传递给@InsertTS datetime
参数。如果它为null,则只考虑具有适当值的GETDATE()
值。正如您所提到的那样,时间戳为00:00:00
,我相信您只将没有时间的Date值传递给SP,因为它的00:00:00
数据类型默认情况下将DATETIME
分配给时间戳。
例如,如果您将 2014-01-15 传递给@InsertTS
,则会插入 2014-01-15 00:00:00.000 。如果您传递空值,它将插入GETDATE()
值,例如: 2014-01-15 14:48:24.757
运行以下SQL,我猜你会更好理解。
declare @d datetime = '2014-01-15'
declare @s datetime = null
select ISNULL(@d,GETDATE())
select ISNULL(@s,GETDATE())
答案 1 :(得分:0)
请在Datetime
功能后将其投放到ISNULL()
。
E.g:
declare @d datetime = '2014-01-15'
declare @s datetime = Null
select Cast(ISNULL(@d,GETDATE()) AS Datetime)
select Cast(ISNULL(@s,GETDATE()) AS Datetime)
答案 2 :(得分:-1)
我做了一个解决方法,以防止问题发生:
SET @InsertTS = ISNULL(@InsertTS, GETDATE())
明确将GETDATE()
放在INSERT
声明中:
INSERT INTO Table(InsertTS)VALUES(GETDATE())
ISNULL()
函数只是从GETDATE()
函数中获取日期。
感谢您的回复。