日期:2014-05-19  浏览次数:20457 次

觅高人觅高人觅高人-NULL值违反唯一性问题-NULL值违反唯一性问题
ORACLE9i转SQLSERVER2000数据库.

原ORACLE数据库,有一为报废标记号的字段(标记不可重复),假设字段名为BF.
属性:可以为空,且初始值为空,有唯一性约束.

在ORACLE数据库中由于NULL <> NULL,所以初始为NULL时,不违反唯一性约束.
但在SQLSERVER中NULL=NULL,所以初始为NULL时,违反唯一性约束.

请问:
可否设置SQLSERVER中NULL <> NULL,或者其他方法在SQLSERVER2000完成BF字段在ORACLE中的功能.

------解决方案--------------------
SQL Server的SET ANSI_NULLS 可以控制null的比较结果,但是无论SET ANSI_NULLS ON或SET ANSI_NULLS OFF,SQL Server的唯一索引都只能插入一个null。

在SQL Server中要实现你的功能,最好再建立一个自动编号的字段(Oracle没有),让它和BF建立联合唯一索引,以保证唯一性。
------解决方案--------------------
假如id+bf为联合主键,id为自增字段,记录的效果为:
id bf
1 null
2 null
3 a
4 b
...

这可以保证你的原有数据不发生改变,而且可以保证记录唯一。但是如果想在sql server中只保证bf唯一,那就要改变bf的值了,因为sql server认为两个null也是重复的。
------解决方案--------------------
再描述一下我的问题:
在SQL-SERVER2000中
设置BF字段初始值为空,且不违反唯一性,插入后也要保证BF字段唯一性.

可以达到这样的要求吗?不可以吗?
------解决方案--------------------
DING