有没有一种优雅的方式来颠倒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