不是的副本
User-Defined Table Type insertion sometimes causing conversion error
我有一个用户定义的表类型:
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
在我的数据库层中使用
DateTime.Now(),
而所有其他字段都来自导入的表。
当我导入一个填充了日期字段的文件时,我会得到一个SQL错误:
从字符转换日期和/或时间时转换失败
字符串。
使用SQL事件探查器截取生成的代码显示:
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,并直接插入到表[导入]。没有逻辑,没有触发器,没有对其他表的引用。
在SSMS中执行此代码将显示与预期相同的错误。
修剪最后一个日期时间字段的最后4位数字会导致插入查询成功。
到现在为止,一直都还不错。
当导入的文件的startdate和enddate字段为空时,不会出现错误,并且数据已成功插入到导入表中。
当我使用探查器截获成功的插入时,我得到了:
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
请记住,此查询已成功地在表导入中插入一行。
当我在SSMS中运行这个最新的查询时,我得到了与以前相同的转换错误,
但它在我的MVC应用程序中运行没有错误!
这最后一部分使我很为难。
怎么可能?
项目正在使用MVC和SQL2016。