TSQL 多列唯一约束也允许多个 Null

2024-05-03

我目前正在做一些从 MS Access 到 SQL Server 的迁移。 Access 允许唯一索引中存在多个 Null,而 SQL Server 不允许...我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1_notnull 
ON tblEmployee(col1) 
WHERE col1 IS NOT NULL;

我遇到的问题是,我不确定如何实现复合或多列“过滤”索引......或者这是否真的可能,因为我在研究它时没有找到任何例子。

我确实有一个想法通过创建过滤索引来实现它,如下所示:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1col2_notnull 
ON tblEmployee (col1, col2) 
WHERE col1 IS NOT NULL

然后添加第二个过滤索引:

CREATE UNIQUE NONCLUSTERED INDEX idx_col2col1_notnull 
ON tblEmployee (col1, col2) 
WHERE col2 IS NOT NULL

但我不确定这是否有效,更不用说是最好的方法了。正确方向的指导将不胜感激。


您可以添加以下索引以仅对不可为空的列建立索引:

create table tblEmployee(col1 int, col2 int)
go

create unique nonclustered index idx_col1col2_notnull ON tblEmployee(col1,col2) 
where col1 is not null and col2 is not null
go

--This Insert successeds
insert into tblEmployee values
(null, null),
(null, null),
(1, null),
(1, null),
(null, 2),
(null, 2)

--This Insert fails
insert into tblEmployee values
(3, 4),
(3, 4)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TSQL 多列唯一约束也允许多个 Null 的相关文章

随机推荐

  • 使用 SingleChildScrollView 时无法向下拖动底部工作表

    我创建了一个带有bottomsheet 和listview builder 的应用程序 在底部 有一个文本按钮 当我将其向上拖动时 底部工作表必须出现 底页上有一张表格 我用 SingleChildScrollView 包裹底部纸张 但是当
  • 如何在屏幕上动态移动 Textview? (框架布局)

    我有一个应用程序 可以在屏幕上的 FrameLayout 上显示相机视图 屏幕处于固定风景模式 我需要编写一个带有动态确定的屏幕坐标的textView 坐标以百分比确定 例如 将文本视图写入屏幕坐标 x 80 y 20 屏幕上 将文本视图写
  • 如何使用C来限制SubString、Limit? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 第1节 include
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • 重新排序 numpy ndarray 的最后一个维度

    我有一个未指定维度的数组 可能是 1D 2D 3D 4D 我想使用与最后一个维度大小相同的索引数组来申请对最后一个维度进行重新排序 我知道如何使用虚拟 if if 语句来做到这一点 import numpy as np a np ones
  • PutAsync 不会向 Web api 发送请求,但 fiddler 工作正常

    几个小时以来我一直在试图找出问题所在 但我就是找不到问题所在 通过 Mvc 应用程序 put 方法不会被命中 请求不会发生 但是当我在 fiddler 中测试它时 api 中的 PutMethod 可以工作 希望有人能为我解决问题 也欢迎提
  • WebStorm已将目录中的所有文件标记为非项目文件

    WebStorm 已将我的项目子目录 根目录的服务器部分 中的所有文件标记为非项目文件 它发生在我转换到 Babel 然后又转换到 TypeScript 的过程中 我已经删除了 TypeScript 的内容 想知道这是否与该配置有关 我相信
  • R中的Score Sentiment函数,始终返回0

    我对分数有一个 可能 愚蠢的问题 情绪 我尝试将此函数与 3 个默认短语一起使用 问题是该函数返回分数 0 0 0 但它应该返回 2 5 4 我不明白这个问题 因为 RGui 不会给我错误 而且我正在遵循教程 我已经下载了否定词和肯定词的列
  • 如何在play 2.0模板中格式化数字/日期?

    我在使用 play 2 0 模板系统时遇到了一些困难 我有一个方法返回 scala 中的 Int 我想使用模式 对其进行格式化 我努力了 order itemCount format and order item count format
  • 会话 ID 不够随机 - ASP.NET

    UPDATE 我们最终与 Acunetix 团队的一些程序员进行了会面 他们意识到他们的代码中可能存在一些错误 导致扫描中显示的问题比实际情况更严重 普遍的共识是忽略扫描结果并使用开箱即用的 ASP NET 会话 ID 生成 因为它对于我们
  • 如何绑定国家/地区更改国际电话输入

    我使用国家代码插件名称国际电话输入 js https intl tel input com 这是我的演示页面 在页面中我想清空手机 输入字段 当国家选择改变时 div class demo h3 Demo h3 div class iti
  • IIS:添加功能

    我需要使用 IIS 7 0 中的 IP 地址和域限制功能编辑 IP 规则 但在我的 Windows 7 计算机上 我的 IIS 中不存在此功能 有谁知道如何向 IIS 添加此功能 我无法在任何地方找到下载 或 IIS 中用于添加功能的部分
  • 提供带有偏移量的日期字符串(+0530)与在显示名称中单独指定时区(亚洲/加尔各答)

    提供带有偏移值的日期字符串有什么好处 例如 0530 而不是单独指定其时区作为 TimeZone 显示名称 例如Asia Calcutta Summary 偏移量准确地告诉您相对于 UTC 的日期和时间 因此它是明确的 时区会告诉您该日期遵
  • 如何在课外使用$this?

    我们可以使用 this课外 请看下面的例子
  • 如何让 C# Cmdlet 参数 HelpMessage 显示在“Get-Help”中

    我已启动 PowerShell cmdlet 并希望提供参数的帮助消息 我尝试过使用ParameterAttribute HelpMessage为了这 Cmdlet VerbsCommon Get Workspace SupportsSho
  • 列出类的所有实例

    我编写了一个 Python 模块 其中有几个类继承自一个名为MasterBlock 我想在脚本中导入此模块 创建这些类的多个实例 然后获取该类的所有子级的所有现有实例的列表MasterBlock班级 我找到了一些解决方案vars Block
  • Flot 中轴的逗号分隔数字

    有没有办法让 Flot 使轴编号以逗号分隔 例如 用 1 000 000 代替 1000000 您可以通过使用轴的tickFormatter 属性来做到这一点 xaxis tickFormatter function val axis in
  • Mojave + Xcode 10 构建在 glog config.h、gflags/gflags.h 上失败

    我正在 Mac OS Mojave 和 Xcode 10 上测试 React Native 0 56 0 rc 2 Running react native init TestProject version 0 56 0 rc 2 cd T
  • Excel VBA 中的正则表达式

    我在 Excel VBA 中使用 Microsoft 正则表达式引擎 我对正则表达式很陌生 但我现在有一个正在运行的模式 我需要扩展它 但我遇到了麻烦 到目前为止 这是我的代码 Sub ImportFromDTD Dim sDTDFile
  • TSQL 多列唯一约束也允许多个 Null

    我目前正在做一些从 MS Access 到 SQL Server 的迁移 Access 允许唯一索引中存在多个 Null 而 SQL Server 不允许 我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移 CREAT