我有一个表在我的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()
函数删除默认值。
你的问题有两种可能的解决方法。
- 在存储过程中声明一个局部变量,设置为
GETDATE()
。使用这个局部变量。 - 创建一个变量集
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);