这个SQL IF用Ampersand做什么?

时间:2009-05-31 23:34:02

标签: sql

这个SQL IF使用Ampersand做什么?

IF ((@TablesToDeleteFrom & 1) <> 0 AND
            (@TablesToDeleteFrom & 2) <> 0 AND
            (@TablesToDeleteFrom & 4) <> 0 AND
            (@TablesToDeleteFrom & 8) <> 0 AND
            (EXISTS (SELECT UserId FROM dbo.aspnet_Users WHERE @UserId = UserId)))
        BEGIN
    ...

这是来自aspnet mebership DB,位于aspnet_Users_DeleteUser SP中。 @TablesToDeleteFrom声明为int并默认为0.我还没有看到使用&amp;喜欢这样。

2 个答案:

答案 0 :(得分:7)

这是bitwise运算符。基本上,要删除的表将通过创建表的按位值组合,在单个基于整数的字段中存储多个表。这是一个例子。

1 - TableA
2 - TableB
4 - TableC
8 - TableD

TableA&amp; TableB = 1 | 2 = 3.(使用OR运算符获取结果,使用AND运算符检查结果)。所以3的值存储在字段中。然后,您可以使用&符运算符查看值是否已设置。 1&amp; 3 == 1,因此TableA将被删除。 4&amp; 3 = 0因此不会删除TableC。

答案 1 :(得分:5)

正如@Bob所说,&是按位的;顺便说一句,相当于

的更紧凑
IF ((@TablesToDeleteFrom & 1) <> 0 AND
            (@TablesToDeleteFrom & 2) <> 0 AND
            (@TablesToDeleteFrom & 4) <> 0 AND
            (@TablesToDeleteFrom & 8) <> 0 AND

IF ((@TablesToDeleteFrom & 15) = 15) AND