Je convertis des données dans SQL Server:
INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)
j'ai donc besoin d'inverser la valeur en bits de la table source. Je m'attendais à ce que NOT
fonctionne, car c'est ainsi que je le ferais dans le code, mais ce n'est pas le cas. La façon la plus élégante à laquelle je peux penser est:
INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)
Existe-t-il une manière plus standard de procéder?
Je n'ai pas testé cela moi-même, mais vous devriez pouvoir utiliser opérateur de négation au niveau du bit , ~
un peu:
INSERT INTO MYTABLE (AllowEdit)
(SELECT ~PreventEdit FROM SourceTable)
NON ou XOR si bit
SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable
Si ce n'est pas réellement un bit dans SourceTable, alors ceci:
SELECT 1 - PreventEdit FROM SourceTable
Edit: Un test, notez que NOT est un complément de 2, donc pourrait donner des résultats étranges s'il n'est pas utilisé sur une colonne de bits
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
INSÉRER DANS MYTABLE (AllowEdit) (SELECT ~ ISNULL (PreventEdit, 0) FROM SourceTable