如何解决违反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表中。检查表中是否还有其他触发器,然后查看它们的作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。