首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果sql大容量复制上载中的excel工作表列值为空,则绑定默认值

如果sql大容量复制上载中的excel工作表列值为空,则绑定默认值
EN

Stack Overflow用户
提问于 2015-06-15 09:59:52
回答 1查看 1.2K关注 0票数 0

我创建了mvc 4应用程序,它可以使用sql批量复制上载方法将数据上传到数据库。

一旦选择excel文件,就可以将数据上传到系统中。

这很好,现在如果excel字段为null,我想添加默认值。

这就是它如何提取excels列值的方法。

代码语言:javascript
运行
复制
     "s1.Gender, " +
     "s1.Country_of_Birth, " +
     "s1.Date_of_Birth, " +

我想从代码级别添加默认值,我已经使用数据库级别来处理这个问题了。

例如,要为“出生日期”添加默认值,我添加了以下约束

代码语言:javascript
运行
复制
ALTER TABLE [dbo].[tbl_HEI_student] ADD  CONSTRAINT [DF_tbl_HEI_student_Date_of_Birth]  DEFAULT (getdate()) FOR [Date_of_Birth]

但是,当我将excel文件上载到db中时,SQL批量复制上载方法忽略了添加默认值数据库。

如何从控制器方法中添加默认值

EN

回答 1

Stack Overflow用户

发布于 2015-06-15 10:10:58

您的问题必须是列允许NULLS。

如果您的列允许NULL,并且在insert上提供一个NULL值,则将插入空。如果没有为该列提供值,则将考虑默认值。

将列设置为NULL。

代码语言:javascript
运行
复制
ALTER TABLE [dbo].[tbl_HEI_student] ALTER COLUMN [Date_of_Birth] DATE NOT NULL

这是默认定义

编辑:

正如您已经注意到的,您不能对该列进行BulkInsert操作,并使默认值在SqlServer端占上风,而我建议的NULL将强制执行不提供值或除NULL以外的其他值。

我能看到一些选择。

  • 要么通过将值设置为缺省值来处理.NET端(如果需要帮助,则必须向您展示.NET代码)
  • 对具有值的行执行一次大容量处理,对不带值的行执行另一次大容量操作,并删除该列的映射,则默认约束将采取行动。
  • 将行设置为允许NULLS,按正在执行的操作执行大容量操作,并在大容量之后执行更新,将NULLS设置为默认值。

我知道散装插入BCP都有一个限定符,如这里所示,用于处理空值。在.NET SqlBulkCopy选项中也可以使用相同的选项。

这里是与您的问题相关的另一个问题。

请记住,数据库架构应该帮助您执行业务规则,并保持数据的清洁。如果日期不应该为空,则将列保持为NULL,并相应地执行解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30842321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档