有没有一种优雅的方式来颠倒SQL插入语句中的位值?

我正在转换SQL Server中的一些数据:

INSERT INTO MYTABLE (AllowEdit) (Select PreventEdit from SOURCETABLE) 

所以我需要反转源表中的位值。 我预计NOT工作,因为这是我如何在代码中做到这一点,但事实并非如此。 我能想到的最优雅的方式是:

 INSERT INTO MYTABLE (AllowEdit) (Select ABS(PreventEdit -1) from SOURCETABLE) 

有没有更标准的方法来做到这一点?

我没有自己testing,但是你应该可以使用按位否定运算符 ~

 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 

编辑:一个testing,注意NOT是2s补码,所以如果不用在比特列上,可能会给出奇怪的结果

 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 

INSERT INTO MYTABLE(AllowEdit)(SELECT〜ISNULL(PreventEdit,0)FROM SourceTable