CREATE TABLE [dbo].[InBill]
(
[autoid] [int] IDENTITY(1,1) NOT NULL,
[coutureID] [int] NOT NULL,
[barCode] [nvarchar](20) NULL,--COUTUREID和Barcode是组成唯一索引INDEX_A
[qty] [decimal](18, 0) NULL
)
GO
DECLARE @COUTUREID INT
DECLARE @BAR  NVARCHAR(20)
SELECT @COUTUREID=COUTUREID,@BAR=BARCODE FROM InBillBEGIN TRAN
  
  DELETE FROM InBill WHERE autoid=527  --我把这句删除后,注意只修改了QTY字段后又想再插入
  INSERT INTO InBill (coutureID,barCode,qty) VALUES(@COUTUREID,@BAR,3);--这句产生了错误
COMMIT TRAN
/*消息 2601,级别 14,状态 1,第 9 行
不能在具有唯一索引 'INDEX_A' 的对象 'dbo.InBill' 中插入重复键的行。
语句已终止。*/
--我不想用更新,我用删除后再插入的方式,有什么其它方法不能让键重复
--这两句都必须要成功,才能算操作成功

解决方案 »

  1.   

    开头加一句看看
    SET XACT_ABORT ON;
      

  2.   

    SET XACT_ABORT ON;BEGIN TRY
       BEGIN TRANSACTION
          DELETE FROM InBill WHERE autoid=527;
          INSERT INTO InBill (coutureID,barCode,qty) VALUES(@COUTUREID,@BAR,3);
          COMMIT;
    END TRY
    BEGIN CATCH
        IF XACT_STATE() = -1
            ROLLBACK;
    END CATCH这样试试.
      

  3.   

    SELECT @COUTUREID=COUTUREID,@BAR=BARCODE FROM InBill
    >>>这是什么意思? 取最后一条数据的barcode &counterid? 还是你漏条件了