SQL Server数据库,在表上建立唯一性索引的一些问题
发布日期:2021-09-08 22:55:11 浏览次数:21 分类:技术文章

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

为指定数据表的非空值建立唯一性索引:

在SQL Server 2008中,我们可以很方便的为指定数据表的指定字段的所有非空值添加唯一性索引,以保证该字段的所有的非空值在该表中都是唯一的。具体做法如下:

 

1:  CREATE UNIQUE NONCLUSTERED INDEX un_ID_Invoice
2:  ON FeeItem(ID_Invoice)
3:  WHERE ID_Invoice is not null
4:  GO

 

在SQL Server中执行该语句,便会在FeeItem表中的ID_Invoice字段上添加非空唯一性索引,可以保证该表中的所有非空字段都是唯一的。

 

存在问题:

在该表中建立非空唯一性索引后,使用C#向该表中添加(INSERT)、删除(DELETE)、修改(UPDATE)数据时都会提示一个错误:

DELETE 失败,因为下列 SET 选项的设置不正确:'ARITHABORT'。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。

 

原因分析:

我们查询MSDN,关于SET ARITHABORT的描述如下:

查询执行过程中发生溢出或者除以零的错误时结束查询。…  当 SET ARITHABORT 是 OFF 的时候,如果INSERT、DELETE 或 UPDATE 表达式发现算术错误、溢出、除以零或者范围错误,SQL Server会插入或更新 NULL 值。如果目标行不可为NULL,插入或者更新操作就会失败而且使用者会收到错误信息。… 當您建立或變更計算資料行索引或索引檢視時,SET ARITHABORT 也必須是 ON。 如果 SET ARITHABORT 是 OFF,含計算資料行索引的資料表或索引檢視之 CREATE、UPDATE、INSERT 和 DELETE 陳述式會失敗。

 

 

解决方案:

1.你必须在TSQL前Set ARITHABORT ON,代码如下

1:  Set ARITHABORT ON
2:  GO
3:  INSERT INTO ta ..
 

2.在ADO中,你可以这样来写(C#代码)

 

1:  MyConnection.Execute("SET ARITHABORT ON");
 

如果以上你都觉得很麻烦或由于一些原因没法更改,你可以尝试修改SQL Server服务器选项

3.

1:  exec sp_dboption 'yourdb','ARITHABORT','true'
 

或者

4.

1:  ALTER DATABASE yourdb
2:  SET ARITHABORT ON

转载于:https://www.cnblogs.com/chaosimple/archive/2012/11/17/2775259.html

转载地址:https://blog.csdn.net/weixin_34341229/article/details/93400029 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:vue element-ui 2.3.4版本 input number值为0时 显示不出来
下一篇:Pretty printing JSON from Jackson 2.2's ObjectMapper

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月20日 06时38分20秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

spring boot 与 Ant Design of Vue 实现获取用户列表(二十七) 2021-06-30
spring boot 与 Ant Design of Vue 实现新增用户(二十八) 2021-06-30
spring boot 与 Ant Design of Vue 实现修改用户(二十九) 2021-06-30
spring boot 与 Ant Design of Vue 实现删除用户(三十) 2021-06-30
spring boot 与 Ant Design of Vue 鉴权体系登录的实现(三十一) 2021-06-30
spring boot 与 Ant Design of Vue 鉴权体系获取用户信息的实现(三十二) 2019-04-27
Druid连接池实现自定义场景的多数据库的连接 2019-04-27
CentOs7命令行(静默)的方式安装oracle数据库 2019-04-27
基于VMware安装CentOs7的镜像 2019-04-27
PL/SQL数据库管理工具的使用 2019-04-27
史上最简单的spring-boot集成websocket的实现方式 2019-04-27
带你玩转属于自己的spring-boot-starter系列(一) 2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二) 2019-04-27
带你玩转属于自己的spring-boot-starter系列(三) 2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分库解决方案(二) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分表解决方案(一) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之关联查询解决方案(三) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之基于seata的分布式事务的解决方案(十五) 2019-04-27
Linux文件管理参考 2019-04-27