【问题标题】:Is it possible to insert current datetime in a stored procedure which is designed to insert data?是否可以在旨在插入数据的存储过程中插入当前日期时间?
【发布时间】:2020-09-29 19:48:02
【问题描述】:

我创建了以下存储过程:

CREATE PROCEDURE dbo.InsertTutees 
    @StudentID INT = NULL, 
    @FirstName VARCHAR(50) = NULL, 
    @Surname   VARCHAR(50) = NULL, 
    @Major     VARCHAR(50) = NULL,
    @Timestamp DATETIME = NULL  
AS 
BEGIN 
    SET NOCOUNT ON 

    INSERT INTO dbo.Tutees (StudentID, FirstName, Surname, Major, Timestamp) 
    VALUES (@StudentID, @FirstName, @Surname, @Major, @Timestamp) 
END 
GO

EXEC dbo.InsertTutees 
         @StudentID = 2, 
         @FirstName = 'Sarah', 
         @Surname = 'Smith', 
         @Major = 'Science',
         @Timestamp = '2013-12-12';

但是我想用当前时间戳替换时间戳值。我试过GETDATE(),但我收到以下错误:

消息 102,第 15 级,状态 1,第 6 行
')' 附近的语法不正确

是否有其他方法可以在此 exec 语句中检索当前日期?我应该编辑我的存储过程吗?

感谢您的帮助!

编辑: 这是我尝试完成的 exec 语句:

EXEC dbo.InsertTutees
       @StudentID = 2, 
       @FirstName = 'Sarah' , 
       @Surname = 'Smith' , 
       @Major = 'Science' ,
       @Timestamp = getdate()

【问题讨论】:

  • 标记你正在使用的数据库。
  • 请编辑您的问题以显示包含GETDATE() 的代码,该代码为您提供了错误消息。您是否有可能尝试将 GETDATE() 作为参数传递给存储过程?
  • 添加了我尝试的脚本,这导致我出现上述错误。谢谢!

标签: sql-server date stored-procedures timestamp getdate


【解决方案1】:

你可以使用中间变量:

    DECLARE @dt datetime =GETDATE()

    EXEC dbo.InsertTutees
       @StudentID = 2, 
       @FirstName = 'Sarah' , 
       @Surname = 'Smith' , 
       @Major = 'Science' ,
       @Timestamp = @dt

【讨论】:

  • 啊,误解了你的要求。凉爽的。很高兴它成功了。
【解决方案2】:

如果您查找 in the documentation,默认值必须是常量或 NULL。为了获得等同于 GETDATE() 的默认值,您需要在 proc 中按照以下几行编写一些代码:

IF @Timestamp IS NULL
BEGIN
SET @Timestamp = GETDATE();
END

这将允许您提供一个值并根据需要提供一个默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2013-03-06
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多