SQL Server 使用存储过程插入数据时出现日期问题

myzjeezk  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(254)

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

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。我不关心格式,但它肯定不是1900年代。

but5z9lq

but5z9lq1#

可以传递给存储过程的只有常量和变量。
根据Microsoft参考:https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/specify-parameters?view=sql-server-ver16
GETDATE()是一个函数,函数不能用于传递参数值或用作默认参数值。必须使用GETDATE()函数删除默认值。
您的问题有两种可能的解决方法。
1.在存储过程中声明一个设置为GETDATE()的局部变量。使用该局部变量。
1.创建一个设置为GETDATE()的变量,并将该变量传递给存储过程。
上面#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);

相关问题