SQL Server存储过程插入smalldatetime字段日期异常问题求助
问题解决:DateAdded字段插入默认日期异常
问题根源
你存储过程里的@DateAdded参数默认值写错了——GetDate没有加括号(),SQL Server不会把它当成函数调用,反而会将其解析为无效的标识符,最终使用smalldatetime类型的默认值1900-01-01 00:00:00。
修正后的存储过程
把GetDate改成GETDATE()即可:
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字段的作用就是记录数据插入的当前时间,完全不需要在存储过程里定义这个参数。直接在表字段上设置默认值,这样不管通过什么方式插入数据,都会自动填充当前时间,更可靠:
ALTER TABLE dbo.TableName ALTER COLUMN DateAdded smalldatetime NOT NULL DEFAULT GETDATE();
之后存储过程可以简化成:
alter procedure dbo.spAddStuffExample_Insert @Name varchar(100), @EmailAddress varchar(100), @ContactNumber varchar(100), @AdditionalInformation varchar(3000) = NULL as begin set nocount on; insert into dbo.TableName (Name, EmailAddress, ContactNumber,AdditionalInformation) values(@Name, @EmailAddress, @ContactNumber,@AdditionalInformation) end
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

