2013-04-25 67 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%' 
相关问题