【发布时间】:2011-05-23 21:03:47
【问题描述】:
这里是代码
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,
CustNum, -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 专家...任何想法我做错了什么
【问题讨论】:
-
哪个字段是主键?
-
Trans_ID 是我认为的主键...正如我所说我不知道 SQL...我是 mysql 和 php 开发人员,我对 sql server 2008 很陌生
-
正如消息中明确指出的:您正在尝试将 重复值 插入到该表的主键中。解决方案:不要这样做!表的主键必须始终是唯一的 - 在任何情况下,您不能在表的两行中具有两个相同的主键值。
-
Trans_ID 是主键,但我在您的程序中看不到它...
-
Trans_ID是什么数据类型??我们在您的语句中的任何地方都没有看到 - 它是由 SQL Server 自动生成的吗??
标签: sql sql-server-2008