2013-04-25 65 views
0

我遇到了下面的觸發器問題。我認爲這個問題是一次將多行添加到數據庫的時候。而不是插入子查詢返回的值超過1個值

它需要爲插入的n *行工作。

什麼代碼是爲了做的是在插入檢查ESHID列VS另一個表中的ID後4個字符

開始

所以如果有一個匹配,並且isPersonalised是0,那麼我需要設置的地位3否則它應該保持原來的FulfilmentStatus。

ALTER TRIGGER [dbo].[setStatus] 
    ON [dbo].[ESH_OrderLine] 
    INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO ESH_OrderLine(

     OrderID, 
     ESHID, 
     ESHVersion, 
     GBPPrice, 
     Currency, 
     FulfilmentStatus, 
     FulfilmentDate 
    )SELECT 

     OrderID, 
     ESHID, 
     ESHVersion, 
     GBPPrice, 
     Currency, 
     (
      SELECT "Status" = 
      CASE 
       WHEN isPersonalised = 1 THEN '0' --PERSONALISED CD 
       ELSE '3'       -- NON PERSONALISED CD 
      END 
      FROM KSAT_CDs 
      WHERE ID= SUBSTRING(( 
            SELECT ESHID FROM INSERTED 
            WHERE ESHID like 'PHZB%' 
           ),5,10) 

      UNION 
      SELECT "Status" = 
       CASE 
       WHEN ESHID = 'PNP' THEN '0'  --POSTAGE AND PACKING 
      ELSE '4'       --DOWNLOAD 
      END 
      FROM INSERTED 
      WHERE ESHID NOT LIKE 'PHZB%' 
     ) as FulfilmentStatus, 
     FulfilmentDate 
    FROM 
    INSERTED 

END 

回答

0

是否將union的第一部分更改爲此幫助?

SELECT "Status" = 
      CASE 
       WHEN k.isPersonalised = 1 THEN '0' --PERSONALISED CD 
       ELSE '3'       -- NON PERSONALISED CD 
      END 
      FROM KSAT_CDs k 
      inner join inserted i on k.ID = substring(i.ESHID, 5, 10) 
      where i.ESHID like 'PHZB%' 
相關問題