2012-01-31 15 views
7

में सम्मिलित करें मैं इस कार्य को पूरा करने का एक और अधिक प्रभावी तरीका ढूंढ रहा हूं। यदि यह मौजूद है, तो मुझे एक आईडी के बराबर एक चर सेट करने की आवश्यकता है, और यदि इसे सम्मिलित नहीं किया गया है और फिर चर को सम्मिलित पहचान में सेट करें। मैं कर ऐसा कर सकते हैं निम्नलिखित:SQL सर्वर सेट चर मौजूद है यदि मौजूद है तो तालिका

@VariableName --sent through to stored procedure 

DECLARE @VariableID [int] 

IF EXISTS(SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName) 
    SET @VariableID = (SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName) 
ELSE 
    INSERT INTO VariableTable(VariableName) VALUES(@VariableName) 
    SET @VariableID = SCOPE_IDENTITY(); 
END 

यह एक ही क्वेरी दो बार चलाने के लिए अक्षम लगता है हालांकि (जाँच करता है, तो मौजूद है और यह चर सेट करने पर)

बस एक बेहतर तरीका पर सुझाव के लिए देख इस काम को पूरा करने के लिए।

उत्तर

14

प्रयास करें:

DECLARE @VariableID [int] 
SELECT @VariableID=VariableID FROM VariableTable WHERE VariableName = @VariableName 

IF @VariableID IS NULL 
BEGIN 
    INSERT INTO VariableTable(VariableName) VALUES(@VariableName) 
    SET @VariableID = SCOPE_IDENTITY(); 
END 
1

इस प्रयास करें:

INSERT INTO VariableTable (VariableID) 
SELECT SCOPE_IDENTITY() 
FROM VariableTable 
WHERE not exists 
(
SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName 
) 

तो अगर आप आईडी की जरूरत है आप चर @@ पहचान स्थापित करने के लिए होगा। मुझे लगता है कि यह सबसे कुशल है क्योंकि आप तीसरी क्वेरी नहीं बना रहे हैं, लेकिन सिर्फ अंतिम आईडी डालने पर ही।

1

मैं इस स्निपेट परीक्षण किया है और इसे सही ढंग से कार्यान्वित:

DECLARE @VariableID [int] 
SET @VariableID=(SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName) 
IF @VariableID IS NULL 
BEGIN 
    INSERT INTO VariableTable(VariableName) VALUES(@VariableName) 
    SET @VariableID = SCOPE_IDENTITY(); 
END 
+0

एसईटी वाक्यविन्यास के लिए +1, ansi के लिए। – goodeye

1

यहाँ @Mithrandir जवाब देने के लिए एक लाइट संशोधन। आप TOP 1 का उपयोग कर सकते हैं जो आपको परिणाम को तेज करने में मदद करता है जब आप अद्वितीय फ़ील्ड की तुलना नहीं कर रहे हैं। जैसे

DECLARE @EXISTS AS BIT 
SET @EXISTS = 0 
SELECT TOP 1 @EXISTS = 1 FROM MyTable WHERE MyYear = @Year 
0

इस मनोरंजक अपवाद का प्रयास करें। याद रखें कि कोई BEGIN और END नहीं है, इसलिए IF के बाद अगला कथन सशर्त होना चाहिए। अब खुद से पूछें कि पहला चर क्यों मौजूद है:

declare @check binary 
declare @predeclared varchar(100) 
select @check = 0 

if @check = 1 
    declare @conditionaldeclare nvarchar(4000) 
    select @conditionaldeclare = 'conditionaldeclare' 
    print @conditionaldeclare 


if @check = 1 
    select @predeclared = 'predeclared' 
    print @predeclared 
संबंधित मुद्दे