2010-07-24 8 views
40

मैं एसक्यूएल सर्वर में कुछ डेटा परिवर्तित कर रहा हूँ:क्या एसक्यूएल सम्मिलन वक्तव्य में बिट बिट को घुमाने के लिए कोई शानदार तरीका है?

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

तो मैं स्रोत तालिका से बिट मूल्य उलटा की जरूरत है। मुझे काम करने के लिए NOT की उम्मीद थी, क्योंकि इस तरह मैं इसे कोड में करूँगा, लेकिन ऐसा नहीं है। सबसे शानदार तरीका मैं सोच सकता हूं:

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

क्या ऐसा करने का एक और मानक तरीका है?

उत्तर

88

मैं इस अपने आप को परीक्षण नहीं किया, लेकिन आप थोड़ा पर bitwise negation operator, ~ उपयोग करने के लिए सक्षम होना चाहिए:

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

से काम करता है पर इस्तेमाल नहीं किया अजीब परिणाम दे सकता है। स्लिक। –

+0

बहुत बढ़िया! अच्छा और आसान समाधान। – Alex

21

NOT or XOR अगर बिट

SELECT ~PreventEdit FROM SourceTable 
SELECT 1^PreventEdit FROM SourceTable 

यदि यह वास्तव में थोड़ा नहीं है SourceTable में यह:

SELECT 1 - PreventEdit FROM SourceTable 

संपादित करें: एक परीक्षण, नोट नहीं 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

शानदार। बहुत बहुत धन्यवाद, मुझे यह कहीं भी नहीं मिला लेकिन शायद यह मेरी खोज शब्द थी। – Molloch

-1

INSERT INTO mytable (AllowEdit) (चुनिंदा ~ IsNull (PreventEdit, 0) SourceTable

+0

कृपया अपना कोड क्या करता है इसके बारे में एक छोटी जानकारी जोड़ें और सुनिश्चित करें कि आप अपने द्वारा खोले गए सभी पैराथेसिस बंद करें – RealCheeseLord

संबंधित मुद्दे