Что этот SQL IF делает с амперсандом? - PullRequest
4 голосов
/ 01 июня 2009

Что этот 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, внутри SP aspnet_Users_DeleteUser. @TablesToDeleteFrom объявлен как int и по умолчанию равен 0. Я не видел использования & как это раньше.

Ответы [ 2 ]

7 голосов
/ 01 июня 2009

Это оператор побитовый . В основном таблицы для удаления будут хранить несколько таблиц в одном целочисленном поле путем создания побитовой комбинации значений для таблиц. Вот пример.

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

Таблица A и Таблица B = 1 | 2 = 3. (Вы используете оператор OR, чтобы получить результат, и оператор AND, чтобы проверить результат). Таким образом, значение 3 сохраняется в поле. Затем вы можете использовать оператор амперсанда, чтобы увидеть, было ли установлено значение. 1 и 3 == 1, поэтому таблица А будет удалена. 4 & 3 = 0, поэтому TableC не будет удален.

5 голосов
/ 01 июня 2009

Как говорит @Bob, & является побитовым и; и так, кстати, более компактный эквивалент

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

есть

IF ((@TablesToDeleteFrom & 15) = 15) AND
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...