`

筛选索引简单使用

 
阅读更多
对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解决。出于强制唯一性的目的,SQL Server支持的UNIQUE约束认为两个NULL是相等的,这意味着,如果在一个允许为NULL的列上定义了一个UNIQUE约束,那么这个列上就只能有一行可以为NULL。但在一些情况下,可能只需要对非NULL值强制实施唯一性约束,允许存在多个NULL值。ANSI SQL确实支持这种UNIQUE约束,但SQL SERVER还从未实施过这种约束。现在,有了筛选索引,这种需求解决起来也不难。只要创建一个唯一的筛选索引,将其筛选谓词定义为WHERE<列>IS NOT NULL。例如,运行以下代码,创建一个T1表,并在它的COLL列 定义一个这样的筛选索引:
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;
分享到:
评论

相关推荐

    MySQL创建全文索引分享

    在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段。现在我们希望能够在title和content两个列上创建全文索

    screener:React-Redux库存筛选器

    使用和Redux构建的股票筛选器。 此筛选器连接到Financial Modeling Prep API以获取财务信息。 您将可以看到S&P 500,NASDAQ和EUROSTOXX 50的当前水平。 您可以单击每个指数,然后按市值获取有关最大指数成分的...

    .Net Core,ASP.NET Core,C#的筛选,排序(排序)和分页库-.NET开发

    C#的分页库对于.Net Core开发人员,Fop为您提供了非常简单,易于集成且可扩展的筛选,排序(排序)和分页功能。 要查看详细的文档,请访问Wiki页面。快速入门让我们从这里了解如何使用Fop安装Fop NuGet软件包。 PM&gt;...

    数据库和ado知识

    筛选(Having的使用),它和where的区别 类型转换(CAST,CONVERT) union,union all的使用 一次插入多条数据 字符串函数 ADO.NET主要类 数据库连接字符串 SqlConnection类的State属性 SqlCommand类的方法: ...

    Java数据库编程宝典2

    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 创建...

    Java数据库编程宝典4

    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 创建...

    Java数据库编程宝典1

    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 创建...

    Java数据库编程宝典3

    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进行简单相加

    精通sql结构化查询语句

    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运算符范围筛选 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    16.3 在windows应用程序中使用索引器 293 第16章快速参考 297 第17章 中断程序流程并处理事件 299 17.1 声明和使用委托 299 17.1.1 自动化工厂的例子 300 17.1.2 不使用委托来实现工厂 300 17.1.3 使用委托来...

    精通SQL 结构化查询语言详解

    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表示打开索引功能,即在接下来的查询、更新、删除操作中使用索引。

    pandas系列之DataFrame 行列数据筛选实例

    一、对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据。 为了简化理解,我们不妨换个思路… 现实中,为了简化对一件事物的描述,我们会选择几个特征...一些简易但不算严谨的理解是: 行列 行 –

    明日科技C#开发入门及项目实战

    实例062 使用索引器 实例063 通过类继承计算梯形面积 实例064 封装类实现一个简单的计算器 实例065 通过结构计算矩形的面积 实例066 通过结构计算圆形的面积 实例067 使用面向对象思想查找字符串中的所有数字 实例...

    jsqry:用于查询js对象数组的简单JS库

    jsqry 用于查询JS对象/数组的简单库。... 功能包括: 筛选制图Python样式的数组索引和切片文献资料有关文档和示例,请访问 。安装Nodejs npm install jsqry 或者yarn add jsqry网页&lt; script src ="

Global site tag (gtag.js) - Google Analytics