简单的SQL语句错哪了
简单的SQL语句哪里错了?
写了一个简单的存储过程:
然后写一个简单的代码去调用它:
因为NodId 是主键(所建立的表的成员就是上面那四个变量),所以执行出错了:
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
它在没有主键的时候运行没有问题,而且运行后我没有发现有NodId重复的行啊
上面的该怎么改一下呢,我的要求只是能批量的插入一万条数据(或者更多)
------解决方案--------------------
照理应该不会报错吧。
------解决方案--------------------
批量插入1万条数据:
------解决方案--------------------
修改一下,可以先truncate table dev 表,然后
------解决方案--------------------
你就只有运行一次把,不是同时开N个运行把,那照理是不会有问题的呀
------解决方案--------------------
你的主键是哪个?nodid没重复行是因为插入不成功
------解决方案--------------------
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
------解决方案--------------------
create procedure insert_data(@NodId int, @NodName varchar(20), @Flag tinyint, @Value float)
AS BEGIN
insert into dev(nodid,nodname,flag,value) values(@NodId, @NodName, @Flag, @Value)
END
你的数据有null值吗?
------解决方案--------------------
你可以把你的表结构贴出来,如果表中有数据也贴出来,这样可以更利于解决问题,表中所有主键字段是否有从表关联?按道理如果你是表中所有字段插入数据,应该没错啊
------解决方案--------------------
目标表上的主键问题,或者说,你的来源数据中已经有重复,或者你的来源数据中没有重复,但是目标表有一条数据和来源数据中的某条重复了
写了一个简单的存储过程:
create procedure insert_data(@NodId int, @NodName varchar(20), @Flag tinyint, @Value float)
AS BEGIN
insert into dev values(@NodId, @NodName, @Flag, @Value)
END
然后写一个简单的代码去调用它:
DECLARE @i INT
SET @i = 1
while(@i < 3)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
因为NodId 是主键(所建立的表的成员就是上面那四个变量),所以执行出错了:
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
它在没有主键的时候运行没有问题,而且运行后我没有发现有NodId重复的行啊
上面的该怎么改一下呢,我的要求只是能批量的插入一万条数据(或者更多)
------解决方案--------------------
照理应该不会报错吧。
------解决方案--------------------
批量插入1万条数据:
DECLARE @i INT
SET @i = 1
while(@i <= 1000)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
------解决方案--------------------
修改一下,可以先truncate table dev 表,然后
DECLARE @i INT
SET @i = 1
while(@i <= 10000)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
------解决方案--------------------
你就只有运行一次把,不是同时开N个运行把,那照理是不会有问题的呀
------解决方案--------------------
你的主键是哪个?nodid没重复行是因为插入不成功
------解决方案--------------------
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
说明你表中应该有个字段dev有主键约束,而你给表插入数据没有包括该主键字段,系统会自动给该字段空值,但主键字段不允许存在两个及两个以上的空值,所以出错!你必须在插入其他字段值得时候也给主键字段插入值,或者给主键字段设置
dev int identity(1,1) 如果数据类型符合的话,这个应该也可以解决
------解决方案--------------------
create procedure insert_data(@NodId int, @NodName varchar(20), @Flag tinyint, @Value float)
AS BEGIN
insert into dev(nodid,nodname,flag,value) values(@NodId, @NodName, @Flag, @Value)
END
你的数据有null值吗?
------解决方案--------------------
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
SQL code
?
1
2
说明你表中应该有个字段dev有主键约束,而你给表插入数据没有包括该主键字段,系统会自动给该字段空值,但主键字段不允许存在两个及两个以上的空值,所以出错!你必须在插入其他字段值得时候也给主键字段插入值,或者给主键字段设置
dev int identity(1,1) 如果数据类型符合的话,这个应该也可以解决
可是我就四个字段,存储过程里面对应的也就四个字段。“给表插入数据没有包括该主键字段”是啥意思?存储过程就一句话,是不是那个有问题呢?(我初接触SQL)
你可以把你的表结构贴出来,如果表中有数据也贴出来,这样可以更利于解决问题,表中所有主键字段是否有从表关联?按道理如果你是表中所有字段插入数据,应该没错啊
------解决方案--------------------
我要是双机
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
这个错误,它会指向调用里面的这一行:
while(@i < 1000)
为啥??