我有一个登台表,用于输入新课程。
主持人查看课程,批准(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
新课程的主持人必须在编辑模式下打开课程,并选中标有“已主持”的框。这会将字段设置为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会迁移。我要买它。