1

最初の行は正常に挿入されましたが、他の行は挿入されていませんが、2 行目には主キーの競合はありません

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  
  --@CreatedDate  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         
4

1 に答える 1

2

これが問題です:

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

これは本質的に意味がありません。変数をそれ自体と比較しています。参照の1つから@サインを取り出しCompanyIdます。これRTrimはSQLServerでは不要でありLTrim、後の挿入でも意味がないため、LTrim最終的には問題が発生します。

さらに、EXISTS句の内部では、ORDER BYを使用して最終結果で何かを実行しない限り、TOPは意味がありません。節SELECT *の内側で行うだけです。EXISTS

もう1つ、同時実行性が高く、ユーザーが同じものを同時に挿入しようとする可能性がある場合でも、重複キー違反でクエリが失敗する可能性があります。

于 2012-12-14T07:32:29.843 に答える