Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server “按sql语句删除多行”;从tableName中删除";鉴于触发器“;删去“;已经申请了_Sql Server_Triggers_Sql Delete - Fatal编程技术网

Sql server “按sql语句删除多行”;从tableName中删除";鉴于触发器“;删去“;已经申请了

Sql server “按sql语句删除多行”;从tableName中删除";鉴于触发器“;删去“;已经申请了,sql-server,triggers,sql-delete,Sql Server,Triggers,Sql 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='reachou

我在一个表上应用了“删除后”触发器,下面是脚本:

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."
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。”
当应用delete触发器时,如何使用上述delete语句删除多行。

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

正在返回超过1行的数据

拉吉

试试这个-

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
或者试试这个(更适合使用)-


该错误消息非常明确。您的删除查询似乎不使用子查询,除非****转换为子查询而不是静态值。您需要在此处发布触发器的完整SQL,以获得任何帮助。虽然这可以消除错误,但无法解决逻辑问题(除非具有相同
Notification\u ID
的每一行都具有相同的
ReachOutID
)-您正在从
deleted
中选择任意
ReachOutID
,并忽略所有其他也被删除的行。您需要编写代码,确保
deleted
是一个包含多行的伪表。
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
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
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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


    SET NOCOUNT ON;

    declare @roid int 

    CREATE TABLE #TempTable (ReachOutID INT)

    INSERT INTO #TempTable (ReachOutID)
    select ReachOutID from deleted(nolock) where deleted.NotificaionType='reachoutlike'




DECLARE @getAccountID CURSOR
SET @getAccountID = CURSOR FOR
SELECT ReachOutID
FROM #TempTable
OPEN @getAccountID
FETCH NEXT
FROM @getAccountID INTO @roid
WHILE @@FETCH_STATUS = 0
BEGIN

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



FETCH NEXT
FROM @getAccountID INTO @roid
END
CLOSE @getAccountID
DEALLOCATE @getAccountID

    drop table #TempTable
END