用这个:
;
WITH    cte
          AS ( SELECT   *
               FROM     sys_barcode_1d_y
               UNION ALL
               SELECT   *
               FROM     sys_barcode_1d_y_bak
               UNION ALL
               SELECT   *
               FROM     FG_hi_cust_In
               WHERE    hi_no LIKE 'ESC%'
             )
    DELETE  FROM cte
    WHERE   packageno = 'xxx'

解决方案 »

  1.   


    View 'cte' is not updatable because the definition contains a UNION operator.
      

  2.   

    额,忘了union,那你是想一次性删除3个表?这是不可能的哦
      

  3.   

    你的union是什么意图?把这些数据新建到一个表然后删除某些数据?如果是:
    select * into T
    from (
    SELECT   *
                   FROM     sys_barcode_1d_y
                   UNION ALL
                   SELECT   *
                   FROM     sys_barcode_1d_y_bak
                   UNION ALL
                   SELECT   *
                   FROM     FG_hi_cust_In
                   WHERE    hi_no LIKE 'ESC%')a
    delete from a where xxxxx
      

  4.   

    把三个表union起来一起删数据库会报错。
    2楼的方法使用CTE也还是说“视图 'cte' 不可更新,因为其定义中包含 UNION 运算符。”
      

  5.   

    你是不是要同时删除3个表的数据?除了触发器和级联删除,delete无法一次删多个表
      

  6.   

    三个delete,加上where条件,有就删没有就不删
      

  7.   

    delete    FROM     sys_barcode_1d_y where  packageno='xxx
    delete     FROM     sys_barcode_1d_y_bak where  packageno='xxx'
    delete    FROM     FG_hi_cust_In     WHERE    hi_no LIKE 'ESC%' and  packageno='xxx'