使用存储过程插入数据的日期问题



我有一个表在我的SQL Server数据库与字段DateAdded。我只希望日期和时间格式为dd/mm/yyyy hh:mm:ss,所以我为这个字段选择了smalldatetime数据类型。我现在创建一个存储过程,将数据插入到该表中。在其他字段中-与问题无关-是DateAdded,因为这是一个非NULLABLE字段。我的步骤如下:

alter procedure dbo.spAddStuffExample_Insert
@Name varchar(100),
@EmailAddress varchar(100),
@ContactNumber varchar(100),
@AdditionalInformation varchar(3000) = NULL,
@DateAdded smalldatetime = GetDate
as
begin
set nocount on;
insert into dbo.TableName (Name, EmailAddress, ContactNumber,AdditionalInformation , DateAdded)
values(@Name, @EmailAddress, @ContactNumber,@AdditionalInformation, @DateAdded)
end

记录中添加了错误的日期。DateAdded为1900-01-01 00:00:00。我不关心格式,但它肯定不是20世纪90年代的。

可以传递给存储过程的只有常量和变量。

Per Microsoft Reference: https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/specify-parameters?view=sql-server-ver16

GETDATE()是一个函数,函数不能用来传递参数值,也不能作为默认参数值。您必须使用GETDATE()函数删除默认值。

你的问题有两种可能的解决方法。

  1. 在存储过程中声明一个局部变量,设置为GETDATE()。使用这个局部变量。
  2. 创建一个变量集GETDATE(),并将该变量传递给存储过程。

Ex(#1),在存储过程中声明一个局部变量:

CREATE PROCEDURE dbo.spAddStuffExample 
--These are Passed Parameters, these cannot use functions
@Name varchar(100),
@EmailAddress varchar(100),
@ContactNumber varchar(100),
@AdditionalInformation varchar(3000) = NULL -- = NULL is a default
AS
--Declare local variable using a function
DECLARE @DateAdded smalldatetime = GETDATE();
set nocount on;
--Use passed parameters and local variable together
insert into dbo.TableName (Name, EmailAddress, ContactNumber,AdditionalInformation , DateAdded)
values(@Name, @EmailAddress, @ContactNumber,@AdditionalInformation, @DateAdded);