ALTER PROCEDURE [dbo].[P_UpdateUserLeftRightV2]
@UserId varchar(50),
@TotalBonus decimal(18,2),
@LeftUsers varchar(MAX),
@RightUsers varchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
begin tran
begin
if @LeftUsers <> ''
begin
update [User] set LeftTotal=LeftTotal+@TotalBonus,LeftNew=LeftNew+1 where UserID in (<span style="font-family: Arial, Helvetica, sans-serif;">@LeftUser</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
end
if @LeftUsers <> ''
begin
update [User] set RightTotal=RightTotal+@TotalBonus,RightNew=RightNew+1 where UserID in (@<span style="font-family: Arial, Helvetica, sans-serif;">RightUsers</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
end
update [User] set isupdate = 1 where userid=@UserId;
end
if @@ERROR<>0
rollback tran
else
commit tran
SET NOCOUNT OFF;
END
如上代碼:入參 LeftUsers和@RightUsers 是一個字符串,類似 11,22,33,調用後不能實現效果,where不能成立
解決這個問題,可以使用函數來處理,把入參數據構成列在函數的表值函數下面,函數如下
create function [dbo].[f_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
如何調用如下:select col from [dbo].[f_split](@LeftUsers,',')
ALTER PROCEDURE [dbo].[P_UpdateUserLeftRightV2]
@UserId varchar(50),
@TotalBonus decimal(18,2),
@LeftUsers varchar(MAX),
@RightUsers varchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
begin tran
begin
if @LeftUsers <> ''
begin
update [User] set LeftTotal=LeftTotal+@TotalBonus,LeftNew=LeftNew+1 where UserID in (select col from [dbo].[f_split](@LeftUsers,','));
end
if @LeftUsers <> ''
begin
update [User] set RightTotal=RightTotal+@TotalBonus,RightNew=RightNew+1 where UserID in (select col from [dbo].[f_split](@RightUsers,','));
end
update [User] set isupdate = 1 where userid=@UserId;
end
if @@ERROR<>0
rollback tran
else
commit tran
SET NOCOUNT OFF;
END
即可解決。