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' 中插入重复键的行。
语句已终止。*/
--我不想用更新,我用删除后再插入的方式,有什么其它方法不能让键重复
--这两句都必须要成功,才能算操作成功
SET XACT_ABORT ON;
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这样试试.
>>>这是什么意思? 取最后一条数据的barcode &counterid? 还是你漏条件了