对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解决。出于强制唯一性的目的,SQL Server支持的UNIQUE约束认为两个NULL是相等的,这意味着,如果在一个允许为NULL的列上定义了一个UNIQUE约束,那么这个列上就只能有一行可以为NULL。但在一些情况下,可能只需要对非NULL值强制实施唯一性约束,允许存在多个NULL值。ANSI SQL确实支持这种UNIQUE约束,但SQL SERVER还从未实施过这种约束。现在,有了筛选索引,这种需求解决起来也不难。只要创建一个唯一的筛选索引,将其筛选谓词定义为WHERE<列>IS NOT NULL。例如,运行以下代码,创建一个T1表,并在它的COLL列 定义一个这样的筛选索引:
将以下代码运行2次,尝试向表中插入2行COL1列具有相同非NUL值的行
代码的第2次运行将失败,提示以下错误信息:/*
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.T1' with unique index 'idx_col1_notnull'.
The statement has been terminated.
*/
将以下代码运行2次,尝试向表中插入2行COL1列为NULL的行:
这次两行都插入了。
IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1; CREATE TABLE dbo.T1(col1 INT NULL, col2 VARCHAR(10) NOT NULL); GO CREATE UNIQUE NONCLUSTERED INDEX idx_col1_notnull ON dbo.T1(col1) WHERE col1 IS NOT NULL; GO
将以下代码运行2次,尝试向表中插入2行COL1列具有相同非NUL值的行
INSERT INTO dbo.T1(col1, col2) VALUES(1, 'a');
代码的第2次运行将失败,提示以下错误信息:/*
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.T1' with unique index 'idx_col1_notnull'.
The statement has been terminated.
*/
将以下代码运行2次,尝试向表中插入2行COL1列为NULL的行:
-- Run following twice INSERT INTO dbo.T1(col1, col2) VALUES(NULL, 'a');
这次两行都插入了。
-- Cleanup DROP INDEX Sales.SalesOrderHeader.idx_currate_notnull;
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1278http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 651创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 640SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 382--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 496在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 554大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1678昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1593在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9603① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 707--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 801view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 6721、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1001本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 839数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6586--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2289PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 978APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1356--======================== ... -
Not Exists练习
2012-07-23 14:40 852IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 948第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段。现在我们希望能够在title和content两个列上创建全文索
使用和Redux构建的股票筛选器。 此筛选器连接到Financial Modeling Prep API以获取财务信息。 您将可以看到S&P 500,NASDAQ和EUROSTOXX 50的当前水平。 您可以单击每个指数,然后按市值获取有关最大指数成分的...
C#的分页库对于.Net Core开发人员,Fop为您提供了非常简单,易于集成且可扩展的筛选,排序(排序)和分页功能。 要查看详细的文档,请访问Wiki页面。快速入门让我们从这里了解如何使用Fop安装Fop NuGet软件包。 PM>...
筛选(Having的使用),它和where的区别 类型转换(CAST,CONVERT) union,union all的使用 一次插入多条数据 字符串函数 ADO.NET主要类 数据库连接字符串 SqlConnection类的State属性 SqlCommand类的方法: ...
3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建...
3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建...
3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建...
3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建...
搜索引擎课的大作业:司法搜索 已经支持的功能(置顶) ...Ranker Version2:在倒排索引中增加字段“score”记录每个查询词在各个文档中出现时的BM25得分,排序时对所有词在相应文档中的score进行简单相加
6.3.1 升序排序与降序排序 6.3.2 多列字段排序 6.3.3 使用GROUPBY子句对查询结果进行分组 6.3.4 HAVING子句的应用 6.4 条件查询 6.4.1 WHERE单条件语句查询 6.4.2 运算符查询 6.4.3 BETWEEN运算符范围筛选 ...
16.3 在windows应用程序中使用索引器 293 第16章快速参考 297 第17章 中断程序流程并处理事件 299 17.1 声明和使用委托 299 17.1.1 自动化工厂的例子 300 17.1.2 不使用委托来实现工厂 300 17.1.3 使用委托来...
4.2.5 使用UNIQUE关键字创建惟一索引 4.2.6 使用CLUSTERDE关键字创建簇索引 4.2.7 索引的销毁 4.2.8 使用索引的几点原则 4.3 视图的基础知识 4.3.1 视图简介 4.3.2 视图的优缺点 4.4 视图的创建...
基本功能: 1、 建立数据库表 2、 能够对数据库中的单表进行数据导入 3、 能够对数据库中的单表进行插入 ...h) –index 0/1 0表示关闭索引功能,1表示打开索引功能,即在接下来的查询、更新、删除操作中使用索引。
一、对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据。 为了简化理解,我们不妨换个思路… 现实中,为了简化对一件事物的描述,我们会选择几个特征...一些简易但不算严谨的理解是: 行列 行 –
实例062 使用索引器 实例063 通过类继承计算梯形面积 实例064 封装类实现一个简单的计算器 实例065 通过结构计算矩形的面积 实例066 通过结构计算圆形的面积 实例067 使用面向对象思想查找字符串中的所有数字 实例...
jsqry 用于查询JS对象/数组的简单库。... 功能包括: 筛选制图Python样式的数组索引和切片文献资料有关文档和示例,请访问 。安装Nodejs npm install jsqry 或者yarn add jsqry网页< script src ="