最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > 数据库

SQL Server保证可空字段中非空值唯一

日期:08-01    来源:中国设计秀    作者:cnwebshow.com

由于这个约束不是简单的一个运算,因此我们先创建一个函数,然后再在约束中调用这个函数。 wgX中国设计秀
创建验证逻辑函数: wgX中国设计秀
复制代码 代码如下:wgX中国设计秀
CREATE FUNCTION [dbo].[fn_CK_test_tb_Caption]() wgX中国设计秀
RETURNS BIT wgX中国设计秀
AS wgX中国设计秀
BEGIN wgX中国设计秀
IF(EXISTS( wgX中国设计秀
SELECT 1 wgX中国设计秀
FROM test_tb AS a wgX中国设计秀
WHERE (Caption IS NOT NULL) AND EXISTS wgX中国设计秀
(SELECT 1 AS Expr1 wgX中国设计秀
FROM test_tb wgX中国设计秀
WHERE (Caption IS NOT NULL) AND (Caption = a.Caption) AND (a.TestId <> TestId)) wgX中国设计秀
)) wgX中国设计秀
RETURN 0 wgX中国设计秀
RETURN 1 wgX中国设计秀
END wgX中国设计秀
GOwgX中国设计秀

在约束中引用函数: wgX中国设计秀
复制代码 代码如下:wgX中国设计秀
ALTER TABLE test_tb wgX中国设计秀
ADD CONSTRAINT CK_test_tb_Caption CHECK (dbo.fn_CK_test_tb_Caption() = 1) wgX中国设计秀
GOwgX中国设计秀

现在来测试下效果。先来测试NULL值 wgX中国设计秀
复制代码 代码如下:wgX中国设计秀
INSERT INTO test_tb (Caption) wgX中国设计秀
VALUES (null) wgX中国设计秀
GO wgX中国设计秀
INSERT INTO test_tb (Caption) wgX中国设计秀
VALUES (null) wgX中国设计秀
GO wgX中国设计秀
SELECT * FROM test_tb wgX中国设计秀
GOwgX中国设计秀

可以成功运行,而且也出了多行为NULL的情况。现在再来测试不为空的插入情况。 wgX中国设计秀
复制代码 代码如下:wgX中国设计秀
INSERT INTO test_tb (Caption) wgX中国设计秀
VALUES (N'AAA') wgX中国设计秀
GO wgX中国设计秀
INSERT INTO test_tb (Caption) wgX中国设计秀
VALUES (N'BBB') wgX中国设计秀
GO wgX中国设计秀
INSERT INTO test_tb (Caption) wgX中国设计秀
VALUES (N'BBB') wgX中国设计秀
GO wgX中国设计秀
SELECT * FROM test_tb wgX中国设计秀
GOwgX中国设计秀

结果是在第三条语句的时候报错了,表中的Caption字段也有‘AAA'和‘BBB'了,这也正好是我们要的结果。 wgX中国设计秀
所以解决方案2是正确的。但是为了这么一个小小功能,就写这么长一段东西是不是太繁琐了呢?我们来看下面的解决方案。 wgX中国设计秀
解决方案3:(只适用于SQL Server 2008) wgX中国设计秀
SQL Server 2008中有了一个优雅的解决方案,那就是筛选索引。筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。有了筛选索引,我们只需要写一条语句就达到上面的效果。 wgX中国设计秀
复制代码 代码如下:wgX中国设计秀
CREATE UNIQUE NONCLUSTERED INDEX un_test_tb wgX中国设计秀
ON test_tb(Caption) wgX中国设计秀
WHERE Caption is not null wgX中国设计秀
GOwgX中国设计秀

再用上面的一些测试语句来测试的话,会发现完全是达到了我们的要求。这个方案的唯一缺点就是该语句只有SQL Server 2008支持。不知道各位有没有又优雅又适用于各个版本的SQL Server的解决方案,望不胜赐教。wgX中国设计秀

本文引用地址:/bc/article_60168.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明