我写了一个存储过程中插入姓名和电子邮件地址:如何返回值1存储过程
CREATE PROCEDURE [dbo].[usp_Referral_Email]
@user_key varchar(36),
@name nvarchar(100),
@email nvarchar(500),
@result int output
AS
BEGIN
DECLARE @username Nvarchar(500)
DECLARE @useremail Nvarchar(500)
DECLARE @CusrsorID CURSOR
SET @CusrsorID = CURSOR FOR
SELECT Value,Value1
FROM ufn_split_string(@name,@email)
OPEN @CusrsorID
FETCH NEXT FROM @CusrsorID INTO @username, @useremail
WHILE @@FETCH_STATUS = 0
BEGIN
declare @user nvarchar(36)
begin try
begin transaction trans_Referral_Email
IF NOT EXISTS (SELECT 1 FROM dbo.C_User_Credentials
WHERE email = @useremail)
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.Referral_Email
WHERE R_Email = @useremail)
BEGIN
INSERT INTO dbo.Referral_Email (CFK_C_UP_key, R_Name, R_Email)
VALUES (@user_key, @username, @useremail)
SET @result = 1
END
ELSE
BEGIN
SET @result = 0
END
END
ELSE
BEGIN
SET @result = 0
END
COMMIT transaction trans_Referral_Email
end try
begin catch
rollback transaction trans_Referral_Email
set @result=ERROR_MESSAGE()
end catch
FETCH NEXT FROM @CusrsorID INTO @username, @useremail
END
CLOSE @CusrsorID
DEALLOCATE @CusrsorID
END
作为一个例子,我将通过价值
@name
=ramesh,suresh,rahul
@email
=[email protected],[email protected],[email protected]
在插入之前,我们检查条件电子邮件地址是否存在,假设电子邮件地址存在,它将不会插入表中。 现在我的问题是我会通过例子来解释。 [email protected]和[email protected]是新的电子邮件地址,这两个电子邮件地址都将插入到表,以便返回值是 [email protected]已在表中存在,因此它会插入到表所以返回值将是和输出@返回值将为但我们插入了2个电子邮件地址,所以我需要@返回值应为1作为输出。
所以我的问题是,如果在电子邮件地址的任何地方插入到表中,如果一个电子邮件地址,还插入输出应该@收益率= 1
你看过MERGE()吗?它似乎非常适合这类问题。与@@ ROWCOUNT配对 – scsimon
为什么在这个世界上你使用这样的循环来插入数据?这应该是一个基于集合的方法。这让我怀疑你的分配器是否也是一个基于循环的解决方案。这里有一些更好的替代环路分离器。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –