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值吗?
没有,这是调用的过程: DECLARE @i INT SET @i = 1 while(@i < 1000) BEGIN exec dbo.insert_data @i, '压力传感设备', 1, 29.9 SET @i = @i+1 END
你可以把你的表结构贴出来,如果表中有数据也贴出来,这样可以更利于解决问题,表中所有主键字段是否有从表关联?按道理如果你是表中所有字段插入数据,应该没错啊create table dev ( NodId int primary key not null, NodName varchar(20) not null, Flag tinyint not null, Value float not null )
DECLARE @i INT
SET @i = 1
while(@i <= 1000)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
SET @i = 1
while(@i <= 10000)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
说明你表中应该有个字段dev有主键约束,而你给表插入数据没有包括该主键字段,系统会自动给该字段空值,但主键字段不允许存在两个及两个以上的空值,所以出错!你必须在插入其他字段值得时候也给主键字段插入值,或者给主键字段设置
dev int identity(1,1) 如果数据类型符合的话,这个应该也可以解决
可是我就四个字段,存储过程里面对应的也就四个字段。“给表插入数据没有包括该主键字段”是啥意思?存储过程就一句话,是不是那个有问题呢?(我初接触SQL)
AS BEGIN
insert into dev(nodid,nodname,flag,value) values(@NodId, @NodName, @Flag, @Value)
END
你的数据有null值吗?
没有,这是调用的过程:
DECLARE @i INT
SET @i = 1
while(@i < 1000)
BEGIN
exec dbo.insert_data @i, '压力传感设备', 1, 29.9
SET @i = @i+1
END
你可以把你的表结构贴出来,如果表中有数据也贴出来,这样可以更利于解决问题,表中所有主键字段是否有从表关联?按道理如果你是表中所有字段插入数据,应该没错啊create table dev
(
NodId int primary key not null,
NodName varchar(20) not null,
Flag tinyint not null,
Value float not null
)
消息 2627,级别 14,状态 1,过程 insert_data,第 23 行
违反了 PRIMARY KEY 约束 'PK_dev'。不能在对象 'dbo.dev' 中插入重复键。
这个错误,它会指向调用里面的这一行:
while(@i < 1000)
为啥??