博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server column not allow Null,insert failed
阅读量:5922 次
发布时间:2019-06-19

本文共 1091 字,大约阅读时间需要 3 分钟。

这个是一个Vendor的应用程序报的错误。,单看这个错误原因很简单,尝试将NULL值插入到表,但是表不允许使用NULL值。

 

查到后面发现其实根本原因是字段的内容没有按照当时的规定。按照要求,用户输入的需要包含’-’,但是用户输入的数据没有这个字符,系统尝试用”-”分隔数据的时候出现问题。

 

其实这个是应用程序设计的问题,在用户输入的时候根据规则验证用户的输入,确保所有的数据都是合理的,这样可以避免后续的问题。(如果不做验证的话,除了业务逻辑的问题,还可能会导致SQL注入的问题)。

 

解决思路:除了在应用端做验证,也可以用SQLServer Constraint

 

下面举个例子:

 

createtable test(namevarchar(10))

 

altertable testaddconstraintck_nameCHECK(charindex('-',name)>0)

 

如果我尝试插入没有”-”字符的数据会出现下面的错误:

 

insertinto testvalues ('4')

 

Msg 547, Level16, State 0, Line 1

The INSERTstatement conflicted with the CHECK constraint "ck_name". Theconflict occurred in database "master", table "dbo.test",column 'name'.

The statement has beenterminated.

 

有一点要注意保持事物的完整性,如果一次插入多条记录,不用显示事物的话可能会出现有些插入成功,有些失败的情况。为了保持完整性,可以用显事物:

 

begintry

begintran

insertinto test values ('1-')

insertinto test values ('2-')

insertinto test values ('3-')

insertinto test values ('4')

insertinto test values ('5-')

committran

endtry

begincatch

rollbacktran

endcatch

 

这样如果有一条记录有问题就会回滚整个事务。Constraint还可以限制唯一值,外键,用正则表达式等,功能非常强大,数据输入的时候做好验证,可以避免后续很多的维护问题。

 

本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1351662

转载地址:http://evsvx.baihongyu.com/

你可能感兴趣的文章
JS实现文本的语音朗读
查看>>
Java(1)-知识点(面试题)整理
查看>>
Cocoapods 64-bit(iPhone5s) 问题解决方案
查看>>
homework-01
查看>>
Oracle sql执行计划
查看>>
jenkins+maven+git 实现自动化部署
查看>>
linux就该这么学第八课-磁盘分区和挂载,磁盘限额
查看>>
python 之队列
查看>>
SQL Server 储存过程的output 参数
查看>>
JAVA_OPTS
查看>>
OSGI项目中获取文件路径
查看>>
php利用smtp类轻松的发送电子邮件
查看>>
初学Node(三)模块系统
查看>>
关于SQL的常用操作(增、删、改、查)
查看>>
discuz+ecmall+phpcms整合
查看>>
关于java中assert(断言)的使用讲解
查看>>
vi/vim学习
查看>>
新博客,新生活
查看>>
安卓权威编程指南 - 第五章学习笔记(两个Activity)
查看>>
POJ3630Phone List(字典树)
查看>>