2012-03-23 16 views
7

मेरे पास एक संग्रहित प्रक्रिया है जिसमें इसमें कोई कथन है। यदि पंक्तियों की संख्या 0 से अधिक है तो इसे केवल आउटपुट पैरामीटर @UserId से 0SQL सर्वर संग्रहीत प्रक्रिया में वापसी मान

सेट करना चाहिए, हालांकि यह केवल क्वेरी के दूसरे भाग में एक मान देता है।

@EmailAddress varchar(200), 
@NickName varchar(100), 
@Password varchar(150), 
@Sex varchar(50), 
@Age int, 
@EmailUpdates int, 
@UserId int OUTPUT 
IF 
    (SELECT COUNT(UserId) FROM RegUsers WHERE EmailAddress = @EmailAddress) > 0 
    BEGIN 
     SET @UserId = 0 
    END 
ELSE 
    BEGIN 
     INSERT INTO RegUsers (EmailAddress,NickName,PassWord,Sex,Age,EmailUpdates) VALUES (@EmailAddress,@NickName,@Password,@Sex,@Age,@EmailUpdates) 
     SELECT SCOPE_IDENTITY() 
    END 

END 
+1

आप "क्वेरी के दूसरे भाग में एक मान देता है" से क्या मतलब है? आउटपुट पैरामीटर को एक रिकॉर्डसेट –

उत्तर

5

आप क्या कर सकते हैं या तो निम्न में से 1:

बदलें:

SET @UserId = 0 SELECT @UserId को

यह उसी तरह से अगर के अपने 2 हिस्सा मान प्रदान करेंगे बयान है।


या, @UserId के रूप में देख रहा है एक आउटपुट, परिवर्तन के रूप में सेट किया गया है:

SELECT SCOPE_IDENTITY()SET @UserId = SCOPE_IDENTITY()


को यह कैसे आप बाद में डेटा का उपयोग करना चाहते हैं पर निर्भर करता है। यदि आप अपने परिणाम सेट में मान चाहते हैं, तो SELECT का उपयोग करें। आप बाद में @UserId पैरामीटर के नए मूल्य का उपयोग करना चाहते हैं, तो के रूप में आप 2 शर्त के रूप में सही स्वीकार कर रहे हैं का उपयोग SET @UserId


देखकर के बाहर कुछ भी बदलने के बिना क्वेरी आप (लिख सकता है, इस क्वेरी) है: इस तरह से अपने proc कॉल करने के लिए

@EmailAddress varchar(200), 
@NickName varchar(100), 
@Password varchar(150), 
@Sex varchar(50), 
@Age int, 
@EmailUpdates int, 
@UserId int OUTPUT 
IF 
    (SELECT COUNT(UserId) FROM RegUsers WHERE EmailAddress = @EmailAddress) > 0 
    BEGIN 
     SELECT 0 
    END 
ELSE 
    BEGIN 
     INSERT INTO RegUsers (EmailAddress,NickName,PassWord,Sex,Age,EmailUpdates) VALUES (@EmailAddress,@NickName,@Password,@Sex,@Age,@EmailUpdates) 
     SELECT SCOPE_IDENTITY() 
    END 

END 
+0

के रूप में वापस नहीं किया जाएगा हाय Ive ने @UserId सेट करने के लिए दूसरे भाग को सेट करने का प्रयास किया लेकिन यह –

+0

@andrewslaughter काम नहीं किया मेरे संपादन को देखें। दोनों स्थितियां अब 'SELECT' का उपयोग कर रही हैं, जो आपके परिणाम सेट में एक मान वापस कर देगी। अपने प्रश्न को देखते हुए, ऐसा लगता है कि आप इस क्वेरी से मूल्य का उपयोग कैसे कर रहे हैं – Curt

+0

SELECT 0 बहुत अच्छा काम करता है –

0

प्रयास करें:

DECLARE @UserIDout int 

EXEC YOURPROC @EmailAddress = 'sdfds', @NickName = 'sdfdsfs', ..., @UserId = @UserIDout OUTPUT 

SELECT @UserIDout 
+0

@AndreyGurinov मुझे नहीं लगता कि यह समस्या को कैसे हल करेगा .. UserId अभी भी दूसरी स्थिति के लिए पूर्ण होगा।कि अगर मैं वस्तु अन्वेषक से ExecuteStoredProcedure और में पैरामीटर पहली बार मैं इसे चलाने के शब्दों में कहें, मैं परिणाम फलक में मिल के लिए – Curt

+0

हाय धन्यवाद (कोई स्तंभ नाम) 64 (यह पिछले डालने प्रयोक्ता आईडी है) & UserId शून्य वापसी मान 0 मैं तो इसे फिर से चलाने अगर मैं सिर्फ पाने & UserId 0 वापसी मान 0 –

1

मैं भविष्य सूचकांक मूल्य के पूर्व init बनाने की सिफारिश कर सकते, यह बहुत काम में बहुत उपयोगी है जैसे मल्टी वर्क, कुछ निर्यात e.t.c.

सिर्फ अतिरिक्त User_Seq तालिका बनाने: दो क्षेत्रों के साथ: id Uniq index और SeqVal nvarchar(1)

और अगले सपा बनाते हैं, और से इस सपा आईडी मूल्य उत्पन्न करने और नए उपयोगकर्ता पंक्ति में डाला!

CREATE procedure [dbo].[User_NextValue] 
as 
begin 
    set NOCOUNT ON 


    declare @existingId int = (select isnull(max(UserId)+1, 0) from dbo.User) 

    insert into User_Seq (SeqVal) values ('a') 
    declare @NewSeqValue int = scope_identity()  

    if @existingId > @NewSeqValue 
    begin 

     set identity_insert User_Seq on 
     insert into User_Seq (SeqID) values (@existingId)  
     set @NewSeqValue = scope_identity()  
    end 

    delete from User_Seq WITH (READPAST) 

return @NewSeqValue 

end 
0
@EmailAddress varchar(200), 
@NickName varchar(100), 
@Password varchar(150), 
@Sex varchar(50), 
@Age int, 
@EmailUpdates int, 
@UserId int OUTPUT 
DECLARE @AA INT 
SET @AA=(SELECT COUNT(UserId) FROM RegUsers WHERE EmailAddress = @EmailAddress) 

IF @AA> 0 
    BEGIN 
     SET @UserId = 0 
    END 
ELSE 
    BEGIN 
     INSERT INTO RegUsers (EmailAddress,NickName,PassWord,Sex,Age,EmailUpdates) VALUES (@EmailAddress,@NickName,@Password,@Sex,@Age,@EmailUpdates) 
     SELECT SCOPE_IDENTITY() 
    END 

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