我有一个用户定义的表类型:
CREATE TYPE [dbo].[udtImport] AS TABLE(
Name varchar(256) null
Code varchar(32) null
StartDate varchar(256) null
EndDate varchar(256) null
DateCreated datetime null
DateCreated 字段填充在我的数据库层中DateTime.Now(),
,而所有其他字段都来自导入的表。
当我导入填充了日期字段的文件时,出现 SQL 错误:
从字符串转换日期和/或时间时转换失败。
使用 SQL Profiler 拦截生成的代码显示了这一点:
DECLARE @p1 dbo.udtImport;
INSERT INTO @p1
VALUES
( N'Kit A1',
N'A002',
'2016-04-02 00:00:00.000',
'2016-10-10 00:01:00.000',
'2018-10-22 16:08:28.6823468' );
exec impSaveImport @ImportList=@p1
impSaveImport 是一个存储过程,它只有一个参数:表类型 var 并直接插入表 [Import]。没有逻辑,没有触发器,没有对其他表的引用。
在 SSMS 中执行此代码显示与预期相同的错误。
修剪最后一个 DateTime 字段的最后 4 位数字会导致插入查询成功。
到现在为止还挺好。
当我导入一个 StartDate 和 EndDate 字段为空的文件时,我没有收到任何错误,并且数据已成功插入到 Import 表中。
当我使用探查器拦截成功的插入时,我得到了这个:
DECLARE @p1 dbo.udtImport;
INSERT INTO @p1
VALUES
( N'Kit A1',
N'A002',
null,
null,
'2018-10-22 16:34:11.5243245' );
exec impSaveImport @ImportList=@p1
请记住,此查询成功地将一行插入到表 Import 中。
当我在 SSMS 中运行这个最新查询时,我得到与以前相同的转换错误,
但它在我的 MVC 应用程序中运行没有错误!
最后一部分让我难住了。
怎么可能?
项目正在使用带有 SQL2016 的 MVC。