2

1 つのテーブルに「After Delete」トリガーを適用しました。以下はスクリプトです。

ALTER TRIGGER [dbo].[onDelete_N_UR]
   ON  [dbo].[Notification_UnRead]
   AFTER delete
AS 
BEGIN


SET NOCOUNT ON;

declare @roid int 
set @roid=(select ReachOutID from deleted(nolock) 
where  deleted.NotificaionType='reachoutlike')


update CACHE_Reachout 
set CACHE_Reachout.LIKEcount=(select [dbo].[getReachout_Notification_Count](@roid,'like') ) 
where CACHE_Reachout.ReachOutID=@roid

終わり

今、次のSQLステートメントを使用して、いくつかの行を一括で削除しようとしています:

delete from  Notification_UnRead where Notification_ID=****

そして、それは私にエラーを与えています

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

削除トリガーが適用されたときに、上記の削除ステートメントを使用して複数の行を削除するにはどうすればよいですか。

4

4 に答える 4

2

これを試してみてください -

ALTER TRIGGER [dbo].[onDelete_N_UR]
  ON [dbo].[Notification_UnRead]
  AFTER DELETE
AS BEGIN


     SET NOCOUNT ON;

     DECLARE @roid INT
     SET @roid =
     (
          SELECT TOP 1 ReachOutID
          FROM DELETED d
          WHERE d.NotificaionType = 'reachoutlike'
     )


     UPDATE CACHE_Reachout
     SET CACHE_Reachout.LIKEcount = dbo.getReachout_Notification_Count(@roid, 'like')
     WHERE CACHE_Reachout.ReachOutID = @roid

END

またはこれを試してください(より好ましくは使用するため)-

ALTER TRIGGER [dbo].[onDelete_N_UR]
  ON [dbo].[Notification_UnRead]
  AFTER DELETE
AS BEGIN

     SET NOCOUNT ON;

     UPDATE t
     SET LIKEcount = dbo.getReachout_Notification_Count(d.ReachOutID, 'like')
     FROM CACHE_Reachout t
     JOIN DELETED d ON t.ReachOutID = d.ReachOutID
     WHERE d.NotificaionType = 'reachoutlike'

END
于 2013-07-25T11:23:53.527 に答える
0
ALTER TRIGGER [dbo].[onDelete_N_UR]
ON [dbo].[Notification_UnRead]
AFTER DELETE
AS
BEGIN

     SET NOCOUNT ON;

     DECLARE @roid INT
     SET @roid =
     (
          SELECT TOP 1 ReachOutID
          FROM DELETED(nolock)
          WHERE DELETED.NotificaionType = 'reachoutlike'
     )


     UPDATE CACHE_Reachout
     SET CACHE_Reachout.LIKEcount =
     (
          SELECT [dbo].[getReachout_Notification_Count](@roid, 'like')
     )
     WHERE CACHE_Reachout.ReachOutID = @roid

END
于 2013-07-25T11:31:21.417 に答える
0

また

set @roid=(select ReachOutID from deleted(nolock) 
where  deleted.NotificaionType='reachoutlike')

または

    set CACHE_Reachout.LIKEcount=
    (select [dbo].[getReachout_Notification_Count](@roid,'like') ) 
    where CACHE_Reachout.ReachOutID=@roid

複数行のデータを返しています。

ラージ

于 2013-07-25T11:22:03.657 に答える