Я преобразовываю некоторые данные в SQL Server:
INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)
таким образом, мне нужно к инверсии битовое значение из исходной таблицы. Я ожидал NOT
для работы как, это - то, как я сделал бы это в коде, но это не делает. Самым изящным путем я могу думать:
INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)
Существует ли более стандартный способ сделать это?
Я не тестировал это сам, но вы должны иметь возможность использовать оператор побитового отрицания , ~
в битах:
INSERT INTO MYTABLE (AllowEdit)
(SELECT ~PreventEdit FROM SourceTable)
NOT или XOR if bit
SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable
Если это не бит в SourceTable, то вот это:
SELECT 1 - PreventEdit FROM SourceTable
Edit: A test, note NOT is 2s complement so could give odd results if not used on a bit column
DECLARE @bitvalue bit = 1, @intvalue int = 1;
SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue
SELECT @bitvalue = 0, @intvalue = 0
SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue