MS SQL Server 2014存储过程无法传输DateTime字段;行中的所有其他数据均已传输

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

我有一个登台表,用于输入新课程。

主持人查看课程,批准(Moderated = 1),然后运行下面的存储过程,该存储过程将整行移动到永久表中。

它运作良好且花哨,但不会将DateTime列移入。

这是唯一的DateTime列。我尝试了各种技巧,但都没有用,包括将数据类型更改为DATE。我看了看,两个表都有相同的列,名称([DateRec])和数据类型:DATETIME NULL

从SSMS 2014或C#.NET Core Razor页运行存储过程无法将此列中的值转移过来。

INSERT INTO dbo.Courses
 ([Docs_Prefix],[CourseTitle],[Instructor],[Locations],[Dates],[CEUDWP],[CEUDEQ],[CEUonsiteInstall],[CEUonsiteOandM]
 ,[MaxCEU],[Fees],[SponsorID],[CurrentContactName],[ContactBizName]
 ,[ContactAddress],[ContactCity],[ContactState],[ContactZip],[CurrentContactPhone],[CurrentContactFax],[CurrentContactEmail]
 ,[DateRec],[FeeRec],[CheckNumber],[PrelimAprvDate],[MailedReceipt],[FinalAprvDate],[HomeStudy],[Recurring]
 ,[URL],[TakeOffWeb],[Inactive],[Moderated],[Comments]
 ,[pk_SponsorID]
 ,[BizName],[Code],[Address],[CityStateZip],[City],[State],[Zip],[Phone],[Fax],[Contact],[SponsorEmail])

SELECT
 [NewCourseTempID] 
,[CourseTitle],[Instructor],[Locations],[Dates],[CEUDWP],[CEUDEQ],[CEUonsiteInstall],[CEUonsiteOandM],[MaxCEU],[Fees]
,[SponsorID]
,[CurrentContactName],[ContactBizName],[ContactAddress],[ContactCity],[ContactState],[ContactZip]
,[CurrentContactPhone],[CurrentContactFax],[CurrentContactEmail],[DateRec],[FeeRec],[CheckNumber],[PrelimAprvDate]
,[MailedReceipt],[FinalAprvDate],[HomeStudy],[Recurring],[URL]
,[TakeOffWeb],[Inactive],[Moderated],[Comments]
,[SponsorID]
,[BizName],[Code],[Address],[CityStateZip],[City],[State],[Zip],[Phone],[Fax],[Contact],[SponsorEmail]
FROM [dbo].[Courses_New]
WHERE [Moderated] = 1  

该过程不会出错。其他所有数据都已传输。

这个人在殴打我。

基于评论的更新:

在存储过程中强制转换的日期编码为:Cast('2019-12-26 18:26:18.627'AS DATETIME)。

未在存储过程中强制转换的硬编码日期有效:'2019-12-26 19:19:18.737'

存储过程中的投射字段不起作用:Cast([DateRec] AS DATETIME)

将值从登台表复制并粘贴到最终表中。

用于保存DateRec的C#代码在存储过程运行时不会传输。这曾经是问题:

public async Task<IActionResult> OnPostAsync()
{
Courses_New.DateRec = DateTime.Now;

我刚刚注意到的一件事,相同的表格,相同的字段,相同的数据:在VS 2017中,查看Server Explorer值中的字段显示如下:12/26/2019 7:19:18 PM

查看SSMS 2014中的相同字段,值显示如下:2019-12-26 19:19:18.737

也许我需要格式化我无法弄清楚的格式:Courses_New.DateRec = DateTime.Now;DateTime.Now可能不是DateTime数据类型。


最后,管理员必须使用Razor Pages Edit模板和HTML5日期选择器输入DateRec值。这是VS 2017在决赛桌上看这手输入的值:12/26/2019 12:00:00 AM

这里是SSMS看着相同的字段,相同的表,相同的值:2019-12-26 00:00:00.000

sql-server tsql stored-procedures ssms
2个回答
0
投票

0
投票
但是,我发现我认为是问题所在。好吧,至少到目前为止,它正在运行。

新课程的主持人必须在编辑模式下打开课程,并选中标有“已主持”的框。这会将字段设置为1,这是存储过程用来将行从登台移到永久的条件。

嗯,在“编辑新课程剃刀页面”上,我没有包括“ DateRec”字段,因为我假设保存新课程时会在哪里创建它。 。 。 。 。

但是,由于它在“编辑”页面上不存在,因此登台表中的值设置为Null。去搞清楚。我想这是在模型中,保存时它使该字段为空。

[在[Moderated]字段更改之后,将DateRec字段设置为null之后,似乎所有测试都粘贴到值中。

[有趣的是,编辑后的两个值在日期之后仅包含零。我相信这是因为DateRec字段的数据注释为Date类型,即使Model和table的位置为DATETIME数据类型。因此,仅在创建日期后才显示并保存日期。

[DataType(DataType.Date)] [DisplayName("Date Course Received")] public DateTime? DateRec { get; set; }

[为什么不能将好的完整的DateTime值2019-12-26 21:23:57.107不能从暂存迁移到Permanent,但是稀疏的值2019-12-26 00:00:00.000会迁移。我要买它。

© www.soinside.com 2019 - 2024. All rights reserved.