在SQL Server中创建ANSI兼容索引

日期: 2009-10-19 作者:Denny Cherry翻译:孙瑞 来源:TechTarget中国 英文

在使用其它一些大型数据库平台时,你可能会发现,在创建唯一索引(unique index)方面,SQL Server会有些不同。直到现在,我们还需要使用触发器进行此操作。   首先,我们来介绍一些背景信息。   当你在SQL Server中创建唯一索引时(假设为单列索引),其中每一行都只能有一个空值;而是用Oracle或其它数据库时,它们使用的是ANSI兼容唯一索引,同样的情况下,你的每一行可以有多个空值。

  允许多个空值的逻辑,就是假设NULL不是一个值,它是未知的,那么两个未知的值也是不同的。而在SQL Server中想要获得这样的效果,你就必须在触发器中编写相应的逻辑来确保允许使用多个空……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在使用其它一些大型数据库平台时,你可能会发现,在创建唯一索引(unique index)方面,SQL Server会有些不同。直到现在,我们还需要使用触发器进行此操作。

  首先,我们来介绍一些背景信息。

  当你在SQL Server中创建唯一索引时(假设为单列索引),其中每一行都只能有一个空值;而是用Oracle或其它数据库时,它们使用的是ANSI兼容唯一索引,同样的情况下,你的每一行可以有多个空值。

  允许多个空值的逻辑,就是假设NULL不是一个值,它是未知的,那么两个未知的值也是不同的。而在SQL Server中想要获得这样的效果,你就必须在触发器中编写相应的逻辑来确保允许使用多个空值。

  但是在SQL Server 2008以上的版本,你不需要再进行这么麻烦地操作了。你可以使用一个标准的唯一索引实现ANSI兼容。而其中的技巧就是使用一个过滤索引。

  当你创建一个过滤唯一索引时,其唯一性仅仅针对存储在索引中的值。而没有存储在索引中的值则不需要确保唯一性。因此,如果我们在非空列上创建一个唯一索引,我们就能得到ANSI兼容的唯一索引了。可以通过下面的代码进行测试:

  SQL:
  CREATE TABLE test
  (column1 int)
  go
  CREATE UNIQUE INDEX ux_test_c1 ON dbo.test
  (column1)
  WHERE column1 IS NOT NULL
  go
  INSERT INTO test
  SELECT NULL
  go
  INSERT INTO test
  SELECT NULL
  go
  INSERT INTO test
  SELECT 1
  go
  INSERT INTO test
  SELECT 2
  go
  SELECT *
  FROM test

翻译

孙瑞
孙瑞

相关推荐