是否可以在一个存储过程中插入当前的日期时间,而这个存储过程是为了插入数据而设计的?

问题描述 投票:0回答:1

我创建了以下存储过程。

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()但我得到以下错误。

Msg 102, Level 15, State 1, Line 6 ')' 附近的语法不正确。

在这个执行语句中是否有其他的方法来检索当前日期?我应该编辑我的存储过程吗?

谢谢你的帮助

EDIT:这就是我试图完成的执行语句。

EXEC dbo.InsertTutees
       @StudentID = 2, 
       @FirstName = 'Sarah' , 
       @Surname = 'Smith' , 
       @Major = 'Science' ,
       @Timestamp = getdate()
sql-server date stored-procedures timestamp getdate
1个回答
2
投票

你可以使用一个中间变量。

    DECLARE @dt datetime =GETDATE()

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

3
投票

如果你查一下 在文件中,默认值必须是一个常量或NULL。为了拥有一个相当于GETDATE()的默认值,你需要在proc中编写一些类似这样的代码。

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

这样既可以提供一个值,也可以根据需要提供一个默认值。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.