这个SQL IF用Ampersand做什么?

SCa*_*ady 4 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
    ...
Run Code Online (Sandbox Code Playgroud)

这是来自aspnet mebership DB,位于aspnet_Users_DeleteUser SP中.@TablesToDeleteFrom被声明为一个int并默认为0.我之前没有看过使用&之类的.

Bob*_*Bob 7

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

1 - TableA
2 - TableB
4 - TableC
8 - TableD
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*lli 5

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

IF ((@TablesToDeleteFrom & 1) <> 0 AND
            (@TablesToDeleteFrom & 2) <> 0 AND
            (@TablesToDeleteFrom & 4) <> 0 AND
            (@TablesToDeleteFrom & 8) <> 0 AND
Run Code Online (Sandbox Code Playgroud)

IF ((@TablesToDeleteFrom & 15) = 15) AND
Run Code Online (Sandbox Code Playgroud)