Ответ 1
Я не тестировал это сам, но вы должны иметь возможность использовать оператор поэтапного отрицания, ~
на бит:
INSERT INTO MYTABLE (AllowEdit)
(SELECT ~PreventEdit FROM SourceTable)
Я преобразовываю некоторые данные в 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, если бит
SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable
Если это не бит в SourceTable, это:
SELECT 1 - PreventEdit FROM SourceTable
Изменить: тест, примечание NOT является дополнением 2s, поэтому может дать нечетные результаты, если не используется в столбце бит
DECLARE @bitvalue bit = 1, @intvalue int = 1;
SELECT [email protected], [email protected]
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue
SELECT @bitvalue = 0, @intvalue = 0
SELECT [email protected], [email protected]
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue
ВСТАВИТЬ В MYTABLE (AllowEdit) (SELECT ~ ISNULL (PreventEdit, 0) FROM SourceTable