它成功插入了第一行,但它没有插入任何其他行,但第二行没有主键冲突
我的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
答案 0 :(得分:2)
这是问题所在:
SELECT Top 1 * FROM RecruiterProfile WHERE @CompanyId = LTRIM(RTRIM(@CompanyId))
这本来就没有意义。您将变量与自身进行比较。从其中一个@
引用中取出CompanyId
符号。 SQL Server中不需要RTrim
,LTrim
也没有意义,因为后面的插入也不会LTrim
因此最终会出错。
此外,在EXISTS
子句中,除非您使用ORDER BY并对最终结果执行某些操作,否则TOP没有意义。只需在SELECT *
子句中执行EXISTS
。
还有一件事:如果存在高并发性并且用户可能尝试同时插入相同的内容,则您的查询仍可能因重复的密钥违规而失败。