每月一次,我会收到一个xml文件,其中包含上个月的客户账单。我需要将这些信息存储在数据库中。我有一个名为transactions
的表。我的主要关键是customers_nr
。目前,当我插入数据时,我收到错误
violoation to primary key ......
我正在使用桌面适配器进行插入。基本上我只需要用信息来填充数据库。那么有没有处理这个的命令?或者我应该怎么做
信息的例子
customer_nr: 12345
Billing_name: Microsoft
Billing_city: Seattle
Billing_amount 300
Billing_name: Mcdonalds
Billing_city: Seattle
Billing_amount 25
customer_nr: 4321
Billing_name: Ikea
Billing_city: New York
Billing_amount 1200
答案 0 :(得分:2)
错误表示您的主键至少有两个记录的重复值。
请记住,主键强制其中的数据具有唯一性。
因此您无法在具有相同主键值的表中插入两条记录。您可以将主键更改为新字段(例如自动编号字段),以便从旧的主键字段中删除唯一性约束,然后可以在其中插入重复项!
答案 1 :(得分:0)
使用客户编号显然不是唯一值,这意味着它不能用作主键。
创建IDENTITY
列,或使用GUID
newsequentialid()
(首先作为字段默认值)来获得表格中的唯一键。
示例:
您的数据库结构如下:
uniqueidentifer
,其中newsequentialid()
为默认值)然后你会按如下方式进行:
INSERT INTO transactions (Customer_Nr, Billing_name, Billing_city, Billing_amount)
VALUES ('12345', 'Microsoft', 'Seattle', 300);
如您所见,由于自动生成(唯一)主键值,您无需更改任何带代码的代码。
关于newsequentialid()
的说明是,如果您的数据需要安全/隐私,请不要使用newsequentialid()
,因为猜测序列是微不足道的。
答案 2 :(得分:0)
结算日期时间我更适合此关系中的主键,alt。 customer_nr + billing_datetime。
如果您没有任何日期和时间进行结算,或者只知道月份,则可以将customer_nr,year,month用作复合主键。