违反PRIMARY KEY约束错误SQL

问题描述

| 这是代码
BEGIN TRANSACTION

INSERT INTO [cresql].[dbo].[AR_Transactions] 
       (DateTime,Dirty,Store_ID,Trans_Type,Cashier_ID,CustNum,Trans_Amount,Prev_Cust_Balance) 
    SELECT   
       DATEADD(MINUTE,-30,Getdate()),1,1001,\'C\',100199,-Acct_Balance,Acct_Balance 
    FROM  
       [cresql].[dbo].[Customer] 
    WHERE 
       Acct_Balance <> 0  

UPDATE [cresql].[dbo].[Customer] 
SET Acct_Balance = -500 
WHERE Acct_Balance <> 0  

COMMIT TRANSACTION
但我收到此错误   讯息2627,第14级,州1,第3行   违反了PRIMARY KEY约束\'pkAR_Transactions \'。不能   在对象\'dbo.AR_Transactions \'中插入重复键。   该语句已终止。 我不是SQL专业人士...任何想法我做错了     

解决方法

按照设计,您的表
[cresql].[dbo].[AR_Transactions]
应该只保留一个主键值-在您的情况下,这似乎是构成此PK的列的组合。 这不是SQL问题,但似乎是一个设计概念。 您应该找出构成主键的键组合是什么-可能是设计指出您可以插入一次,然后再对该组合进行更新(尽管我认为这不是一个好的设计)。 编辑 由于Trans_Id是PK,并且您没有在插入内容中使用该列,因此它要么作为IDENTITY,作为DEFAULT(brrrrr)插入,要么使用TRIGGER。 IDENTITY:检查IDENTITY规范是否已拧紧。如果是这样,只需将其重置。这是如何更改T-SQL表变量中的标识列的方法? 默认值:这是一个奇怪的选择,您可能不得不问设计数据库,阅读文档的人,或者只是自己弄清楚它。无论如何,这是一个非常不常见的选择。 触发器:找到触发器并通读代码以查看其作用。这是查找触发器列表的方法。最简便的方法是检查SQL Server中是否存在触发器? 替代方案: 可能有一个触发器插入到可能有问题的AUDIT表中。检查表中是否还有其他触发器,然后查看它们的作用。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...