第一个问题的答案是,它是经过设计的:
https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql
这就意味着,对于第二个问题,您需要添加一些逻辑来检查十进制值,并以您需要的方式处理它们。
关于大容量插入的最后一点,我不是百分之百同意,所以我很乐意接受建议,我相信这是因为SQL Server不知道平面文件中的数据类型,所以所有内容都是字符串。然后,您可以声明应将其转换为
date
或
int
SQL将尝试进行转换。
从字符串转换为
decimal
和
内景
数据类型要严格得多,这就是
bulk insert
抛出错误,如下所示:
declare @t table([ColumnA] decimal(12,2) NULL);
SET NUMERIC_ROUNDABORT ON;
SET XACT_ABORT ON;
insert into @t(ColumnA)
select '9999.99';
select * from @t
go
declare @t table([ColumnA] [bigint] NULL);
SET NUMERIC_ROUNDABORT ON;
SET XACT_ABORT ON;
insert into @t(ColumnA)
select '9999.99';
select * from @t