2009-05-31 29 views
4

SQL IF如何處理&符號是什麼?SQL IF如何處理&符號是什麼?

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.我還沒有看到過像這樣使用&。

+0

的可能重複的[在SQL Server&運算WHERE子句](http://stackoverflow.com/questions/ 670230/operator-in-a-sql-server-where-clause) – outis 2012-03-29 00:41:36

回答

7

這是一個bitwise運營商。基本上,要刪除的表將通過創建表的值的按位組合來將多個表存儲在單個基於整數的字段中。這是一個例子。

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

表A & TableB = 1 | 2 = 3.(您使用OR運算符來獲得結果,AND運算符來檢查結果)。所以3的值存儲在字段中。然後可以使用&符號運算符來查看是否設置了該值。 1 & 3 == 1,所以TableA將被刪除。 4 & 3 = 0因此TableC不會被刪除。

+0

Aaargh!不敢相信我沒看見!感謝鮑勃。 – TheUXGuy 2009-05-31 23:39:16

+0

沒問題,如果你使用它很明顯,但它並不常見。 – Bob 2009-05-31 23:43:21

5

正如@Bob所說,&是按位與;因此,順便說一下,的

IF ((@TablesToDeleteFrom & 1) <> 0 AND 
      (@TablesToDeleteFrom & 2) <> 0 AND 
      (@TablesToDeleteFrom & 4) <> 0 AND 
      (@TablesToDeleteFrom & 8) <> 0 AND 

更緊湊的當量是

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