2010-07-24 10 views
40

Ben SQL Server bazı veriler dönüştürme ediyorum:Bir SQL insert Deyiminde Bit değerini Tersine çevirmenin zarif bir yolu var mı?

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

yüzden kaynak tablosundan biraz değerini ters gerekir. Çalışmak için NOT bekledim, çünkü kodda bunu nasıl yapacağım, ama değil. Düşünebildiğim en zarif yöntem şudur:

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

Bunu yapmak için daha standart bir yol var mı?

cevap

88

Ben kendimi bu test etmedi, ama biraz üzerinde bitwise negation operator, ~ kullanmak mümkün olmalıdır:

INSERT INTO MYTABLE (AllowEdit) 
(SELECT ~PreventEdit FROM SourceTable) 
+1

İTİBAREN çalışır biraz sütun üzerinde kullanılmadığı takdirde tuhaf sonuçlar verebilir olduğunu. Kaygan. –

+0

Awesome! Güzel ve kolay bir çözüm. – Alex

21

NOT or XOR eğer biraz aslında biraz değilse

SELECT ~PreventEdit FROM SourceTable 
SELECT 1^PreventEdit FROM SourceTable 

SourceTable içinde o zaman bu:

SELECT 1 - PreventEdit FROM SourceTable 

Düzeltme: Bir test, not böylece tamamlayacak 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 
+0

Parlak. Çok teşekkürler, bunu hiçbir yerde bulamadım ama muhtemelen arama terimlerimdi. – Molloch

-1

INSERT INTO MyTable (AllowEdit) (SEÇ ~ ISNULL (PreventEdit, 0) SourceTable

+0

Lütfen kodunuzun ne hakkında olduğu hakkında biraz bilgi ekleyin ve açtığınız parantezi kapatın. – RealCheeseLord