2017-08-09 10 views
1

これで私のトリガーはこのエラーの原因です:メッセージ512、レベル16、状態1、プロシージャSofi_TERA_Trigger、行15 サブクエリが1つ以上の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。SQL Serverのトリガーエラー - サブクエリが1つ以上の値を返しました

私はそれが私の "if"だと思ったが、私はそれを変更した(複数の "AND"条件の代わりに "IN"を使う)。私はまた、私のエラーを探しましたが、それはかなり多くのものに関連している可能性があります。

これはおそらく私が見ることができない非常に単純なものです。ここに私のトリガーがあります:

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

有効な構文ではありません。

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

:あなたはそれを変更する必要があります( '* CLOT *'、 '* CLTT *'、 '* CONF *')) ' – Lamak

+0

ちょうど私が必要としていたことは、あなたが望むなら答えを出すことができます。私はそれを受け入れるでしょう。ありがとうございました :) –

答えて

2

問題は行があることです。 `( '* CLTT *'、 '* CONFの*')、( '*のCLOT *' IN)挿入から(セレクトinserted.Statut)あなたは` IFを変更する必要が

IF EXISTS(SELECT 1 FROM inserted WHERE inserted.Statut IN ('*CLOT*','*CLTT*','*CONF*')) 
関連する問題