8

एसक्यूएल सर्वर 2012 का उपयोग कर रहा है। मेरे पास एक संग्रहीत प्रक्रिया है और इसका एक हिस्सा जांचता है कि उपयोगकर्ता नाम तालिका में है या नहीं। अगर ऐसा है, एक 1 लौटने के लिए, यदि नहीं, तो वापस जाने के एक 2. यह मेरा कोड है:एसक्यूएल सर्वर अगर एक्सआईएसटीएस 1 ईएलएसई 2

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2 

हालांकि, मैं नीचे त्रुटि प्राप्त करते रहने:

Incorrect syntax near '1'.

यह एक अगर साथ भी संभव है मौजूद?

सादर,

माइकल

उत्तर

13

आप इसे इस तरह से करना चाहिए, तो इस वाक्य रचना आप के बाद कर रहे हैं है,

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN 
    SELECT 1 
END 
ELSE 
BEGIN 
    SELECT 2 
END 

आप सख्ती से BEGIN..END बयान की जरूरत नहीं है लेकिन यह शायद शुरू से ही है कि आदत में पाने के लिए सबसे अच्छा है।

+1

बहुत धन्यवाद, मैं आपके समाधान के साथ गया हूं और यह काम करता है। – Michael

2

आप एक चर @Result परिभाषित यह

DECLARE @Result AS INT 

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
SET @Result = 1 
else 
SET @Result = 2 
3

क्या उत्पादन है कि आप की जरूरत है, select या print या .. इतने पर में अपने डेटा को भरने के लिए कर सकते हैं। SELECT बिना

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2 
1

एसक्यूएल में आप कुछ भी परिणाम नहीं कर सकते हैं:

तो निम्न कोड का उपयोग करें। IF-ELSE ब्लॉक करने के बजाय मैं कैसे के बारे में IIF का उपयोग कर इस

SELECT CASE 
     WHEN EXISTS (SELECT 1 
         FROM tblGLUserAccess 
         WHERE GLUserName = 'xxxxxxxx') THEN 1 
     ELSE 2 
     END 
1

के लिए CASE बयान का उपयोग करना पसंद?

SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2) 

इसके अलावा, का उपयोग कर पंक्तियों के अस्तित्व की जाँच करने के मौजूद है, * का प्रयोग नहीं करते, बस 1. का उपयोग मेरा मानना ​​है कि यह लागत ऐसा न हो कि गया है।

+0

EXLECT के साथ "चयन *" बनाम "चयन 1" या "चयन 0" का उपयोग करके SQL सर्वर में कोई अंतर नहीं है। वरीयता का मामला अधिक। –

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