2012-12-14 28 views
1

它成功地插入第一行,但它不插入任何其他行插入第一排,雖然第二行有沒有主鍵無法插入第二行插入表雖然由存儲過程

代碼衝突我aspx.cs文件:

outputParVal = sqlCmd.Parameters[outputParName].Value; 

outparameter在存儲過程是--- 「結果」

CREATE PROCEDURE [dbo].[RecruiterProfileInsert] 
    @CompanyId int,  
    @CompanyName varchar(200),  
    @EmailId varchar(50) ,  
    @Password varchar(20) ,  
    @ContactNumber varchar(15),  
    @Website varchar(50),  
    @CompanyProfile varchar(2000), 
    @IsVerified bit, 
    @Result Tinyint OutPut 
    [email protected] datetime ,  
    --UpdatedDate datetime   
AS 
BEGIN   
    -- Insert statements for procedure here   
--check whether @CompanyName already exist or not if exist then return   
IF EXISTS(SELECT Top 1 * FROM RecruiterProfile WHERE @CompanyId = LTRIM(RTRIM(@CompanyId)))   
BEGIN   
    SET @Result = 0-- Already Exists   
END   
ELSE   
BEGIN    
INSERT INTO RecruiterProfile   
( 
    CompanyId,  
    CompanyName,  
    EmailId ,  
    Password ,  
    ContactNumber,  
    Website ,  
    CompanyProfile , 
    IsVerified,  
    CreatedDate  
)   
VALUES   
( 
@CompanyId,  
@CompanyName,   
@EmailId ,   
@Password,  
@ContactNumber,   
@Website,  
@CompanyProfile, 
@IsVerified,   
GetDate() 
)   
set @Result =1  
return     
END 
END   
+0

你有任何錯誤嗎?如果是這樣的話:**什麼**錯誤?請發佈**確切完整的**錯誤信息 - 謝謝! –

+0

我沒有得到任何錯誤 – Subodh

+1

你能告訴我們你第一次和第二次調用這個存儲過程嗎?當你第一次和第二次調用存儲過程時,你會傳入什麼樣的值? –

回答

2

這就是問題:

SELECT Top 1 * FROM RecruiterProfile WHERE @CompanyId = LTRIM(RTRIM(@CompanyId)) 

這固然沒有意義。你正在比較變量本身。請參考CompanyId參考文獻中的@簽名。 RTrim在SQL Server中是不必要的,而LTrim也沒有意義,因爲後面的插入也不是LTrim,所以最終會出現問題。

此外,在EXISTS子句中,除非您使用ORDER BY並對最終結果進行操作,否則TOP無效。 EXISTS條款中只要做SELECT *

還有一件事:如果高併發性和用戶可能嘗試同時插入相同的東西,您的查詢仍然可能會因重複鍵違規而失敗。

+0

阿門。與併發,你可以使用樂觀的版本,並且問題將被解決。時間戳ftw。 –

+0

非常感謝您親愛的朋友EriKE ..他曾工作 – Subodh

+0

@Subodh如果我的回答對您有用,請點擊左邊的複選標記,正下方的投票和投票下箭頭。 – ErikE