日期:2014-05-19  浏览次数:20752 次

关于数据库(sqlserver)插入问题
SQL code

CREATE TABLE M_NAMES (
    ID                INT IDENTITY(1, 1),       --ID
    CLASS_CD        TINYINT NOT NULL,         --暘椶
    NAME_CD            SMALLINT NOT NULL,        --嬫暘
    FULL_NAME        NVARCHAR(60),             --柤徧
    SHORT_NM1        NVARCHAR(10),             --棯徧1
    SHORT_NM2        NVARCHAR(20),             --棯徧2
    REMARK1            NVARCHAR(40),             --旛峫1
    REMARK2            NVARCHAR(40),             --旛峫2
    DIV1            NVARCHAR(2),              --嬫暘1
    DIV2            NVARCHAR(3),              --嬫暘2
    DIV3            NVARCHAR(4),              --嬫暘3
    INS_DATE        DATETIME,                 --搊榐擔
    UPD_DATE        DATETIME,                 --峏怴擔
    VERSION            INT NOT NULL,             --僶乕僕儑儞

    CONSTRAINT PK_NAMES PRIMARY KEY (ID),
    CONSTRAINT U_NAMES UNIQUE (CLASS_CD,NAME_CD)
)
CREATE INDEX INDEX_NAME ON M_NAMES(CLASS_CD,NAME_CD)

时候报错 :违反主键的PK_NAMES的约束。对象' dbo.M_NAMES “你不能插入重复键。
我是重tet文件里读出一条记录插入数据库的。怎么样修改者张表才能正确把数据正确的插入数据库啊。



------解决方案--------------------
你这张表的ID,已经是自增序列了,正常操作是不会出现主键重复的。

说明你所导入的text文件中的记录,其ID,跟数据库中已有表数据的ID存在重复。

这种情况下,如果你不能把数据库中现有记录清空的话(也就是说你并不是在做一个恢复操作),那么你就只能是修改text文件中记录的ID序列号,常用的做法是固定增加一个很大的数。

比如固定增加 80000000:
text文件中ID是 123,那么你写数据库时,ID就改为:80000123
------解决方案--------------------
ID INT IDENTITY(1, 1), --ID
修改id属性 改成否 如图



------解决方案--------------------
1.insert into M_NAMES(CLASS_CD, NAME_CD, ......) vlaues(?,?,?,?,?,?,?,?,?)";
按照M_NAMES 表结构应该是13列。不算 ID 

2.DATETIME类型,null的时候,用setString,有点问题。最好用setNull
------解决方案--------------------
探讨
不用删除这个自增了,Insert语句里面不要带有 ID 字段即可。