这个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.我之前没有看过使用&之类的.
这是一个按位运算符.基本上,要删除的表将通过创建表的按位值组合,在单个基于整数的字段中存储多个表.这是一个例子.
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.
正如@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)
归档时间: |
|
查看次数: |
3716 次 |
最近记录: |