2017-08-09 121 views
1

好吧,我真的被卡住了,我的触发器导致此错误:消息512,级别16,状态1,过程Sofi_TERA_Trigger,行15 子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。SQL Server触发器错误 - 子查询返回多个值

在开始时我认为这是我的“如果”,但我改变了它(在多个“AND”条件下使用“IN”)。我也在寻找我的错误,但它可能与几乎任何事情有关。

这可能是一些非常简单的东西,我看不到。这里是我的触发器:

TRIGGER [dbo].[Sofi_TERA_Trigger] 
    ON [dbo].ZZ 
    AFTER UPDATE,INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF ((Select inserted.Statut from inserted) IN ('*CLOT*','*CLTT*','*CONF*')) 
     BEGIN 
      DECLARE @Id int; 
      DECLARE @Matricule varchar(10); 
      DECLARE @IdAction int; 
      DECLARE @NumeroOF int; 
      SELECT @NumeroOF = inserted.Ordre from inserted; 

      DECLARE OF_CURSOR CURSOR 
       LOCAL STATIC READ_ONLY FORWARD_ONLY 
      FOR 
      SELECT Id,Log.Matricule,IdAction from Log inner join (select max(Id) as maxID,Matricule from LOG where Log.NumeroOF = @NumeroOF group by Matricule) maxID 
      on maxID.maxID = Log.Id where Log.NumeroOF = @NumeroOF; 

      OPEN OF_CURSOR 
      FETCH NEXT FROM OF_CURSOR INTO @Id,@Matricule,@IdAction 
      WHILE @@FETCH_STATUS = 0 
      BEGIN 
       IF @IdAction!=13 
        BEGIN 
         IF @IdAction<=2 
         BEGIN 
          insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,13,GETDATE(),1); 
         END 
         ELSE 
         BEGIN 
          insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,2,GETDATE(),1); 
          insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,13,GETDATE(),1); 
         END 
        END    
       FETCH NEXT FROM OF_CURSOR INTO @Id,@Matricule,@IdAction 
      END 

      CLOSE OF_CURSOR; 
      DEALLOCATE OF_CURSOR; 
    END 
END 
+0

您需要更改IF((从插入中选择inserted.Statut)IN('* CLOT *','* CLTT *','* CONF *'))' ('* CLOT *','* CLTT *','* CONF *'))' – Lamak

+0

正是我需要的,如果你愿意,你可以做出答案,我会接受它。谢谢 :) –

回答

2

的问题是该行:

IF((Select inserted.Statut from inserted) IN ('*CLOT*','*CLTT*','*CONF*')) 

无效语法。您需要将其更改为:

IF EXISTS(SELECT 1 FROM inserted WHERE inserted.Statut IN ('*CLOT*','*CLTT*','*CONF*')) 
相关问题