2012-07-31 33 views
2

我试图创建以下检查约束。检查约束中的括号问题

(
    [Href] IS NOT NULL AND 
    [ETag] IS NOT NULL AND 
    [UserName] IS NOT NULL AND 
    [Password] IS NOT NULL AND 
    [UID] IS NOT NULL 
) 
OR 
(
    [Href] IS NULL AND 
    [ETag] IS NULL AND 
    [UserName] IS NULL AND 
    [Password] IS NULL AND 
    [UID] IS NULL 
) 

我可以保存它,并且没有错误。但SSMS删除了两个内部括号(例如,在开始处仅有开头括号,在末尾仅有右侧括号)。

这似乎完全改变了含义。我希望所有这些列都为空或者它们都不为空。 SQL Server无法处理这个问题有什么原因吗?

+1

对于后面的约束,你可以使用'COALESCE(href,etag,username,password,uid)IS NULL'。 – 2012-07-31 00:33:20

回答

5

SSMS是正确的。括号不需要。

AND在SQL中的优先级高于OR,所以这两个版本(有和没有括号)是等价的。

+0

好的,我没有意识到'AND'和'OR'有不同的优先级。 – 2012-07-31 00:34:08