怎么有效率的对A表包含B表ID的数据进行更新

如何有效率的对A表包含B表ID的数据进行更新
A表
id   名称      mm
1     aa      1,2,3
2     bb      2,3
3     cc       1,3

B表。
id   名称
1     aa
2     bb
3     cc 

现在我想删掉B表某条数据,删除是同时更新A表字段MM,把包含删掉那条数据的ID去掉。
比如:我要删掉B表第一条数据时,同时把A表字段MM的1都去掉
如下面数据
A表
id   名称      mm
1     aa      2,3
2     bb      2,3
3     cc       3

B表。
id   名称
2     bb
3     cc 

原本想到用like的,但如果数据超出9条后就不理想了。。
------解决思路----------------------

create trigger test 
on  b 
for delete
 as 
begin
 update a set mm=stuff(replace(','+mm,','+b.名称,''),1,1,'')
from deleted as b join a 
on a.id =b.id
where exists (select 2 from deleted  where deleted.id=a.id)
end

------解决思路----------------------
你参考下,兼容删除多条,及删除B表id 1 A表 111,2,3不受影响等情况
IF object_id('tgr_B_delete', 'TR') is not NULL
DROP trigger tgr_B_delete
GO
create trigger tgr_B_delete
on B
    for delete 
as
BEGIN
DECLARE @BID VARCHAR(10)
DECLARE @BINDEX VARCHAR(10)
DECLARE @T TABLE(ID INT,I INT)
INSERT INTO @T SELECT ID,ROW_NUMBER()OVER(ORDER BY GETDATE()) FROM DELETED
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
WHILE @@ROWCOUNT<>0
BEGIN
UPDATE A
SET mm=STUFF(REPLACE(','+mm+',',','+@BID+',',','),1,1,'')
WHERE ','+ mm+',' LIKE '%,'+@BID+',%'
UPDATE A
SET mm=STUFF(mm,LEN(mm),1,'')
DELETE FROM @T WHERE I=@BINDEX
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
END
END
GO

------解决思路----------------------
引用:
你参考下,兼容删除多条,及删除B表id 1 A表 111,2,3不受影响等情况
IF object_id('tgr_B_delete', 'TR') is not NULL
DROP trigger tgr_B_delete
GO
create trigger tgr_B_delete
on B
    for delete 
as
BEGIN
DECLARE @BID VARCHAR(10)
DECLARE @BINDEX VARCHAR(10)
DECLARE @T TABLE(ID INT,I INT)
INSERT INTO @T SELECT ID,ROW_NUMBER()OVER(ORDER BY GETDATE()) FROM DELETED
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
WHILE @@ROWCOUNT<>0
BEGIN
UPDATE A
SET mm=STUFF(REPLACE(','+mm+',',','+@BID+',',','),1,1,'')
WHERE ','+ mm+',' LIKE '%,'+@BID+',%'
UPDATE A
SET mm=STUFF(mm,LEN(mm),1,'')
DELETE FROM @T WHERE I=@BINDEX
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
END
END
GO
修正如下
IF object_id('tgr_B_delete', 'TR') is not NULL
DROP trigger tgr_B_delete
GO
create trigger tgr_B_delete
on B
    for delete
as
BEGIN
DECLARE @BID VARCHAR(10)
DECLARE @BINDEX VARCHAR(10)
DECLARE @T TABLE(ID INT,I INT)
INSERT INTO @T SELECT ID,ROW_NUMBER()OVER(ORDER BY GETDATE()) FROM DELETED
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
WHILE @@ROWCOUNT<>0
BEGIN
UPDATE A
SET mm=STUFF(REPLACE(','+mm+',',','+@BID+',',','),1,1,'')
WHERE ','+ mm+',' LIKE '%,'+@BID+',%'
UPDATE A
SET mm=STUFF(mm,LEN(mm),1,'')
WHERE RIGHT(mm,1)=','
DELETE FROM @T WHERE I=@BINDEX
SELECT TOP 1 @BID=CAST(ID AS VARCHAR(10)),@BINDEX=I FROM @T ORDER BY I
END
END
GO