set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[V_Insert]
@id bigint
as
declare @idExist bit
select @idExist = count(id) from visit where id=@id
begin
if @idExist=0
INSERT INTO visitqq (id) VALUES (@id)
end
return @idExist
多线程插入1000条记录 实际只能写入 800多条, 这是怎么回事。 如果把判断条件去掉就好了。
请高手帮我检查下是哪的问题,感激不尽。
------最佳解决方案--------------------
ALTER proc [dbo].[V_Insert]
@id bigint
as
IF NOT EXISTS(SELECT 1 FROM visit where id=@id)
INSERT INTO visitqq (id) VALUES (@id)
return @idExist
注意判断时用visit表,插入是visitqq表
是否正确看没插入的数据是否已存在visitqq表
------其他解决方案--------------------
判断去掉数据是有重复的吧? 这个是因为插入ID已存在 造成没有执行插入操作
------其他解决方案--------------------
是否有重复数据ID,插入时被过滤了
------其他解决方案--------------------
我理解也应该是重复数据造成的。
------其他解决方案--------------------
应该是visit表数据有重复,虽然你返回判断值有1000个,那你看看返回的有没有重复?
------其他解决方案--------------------
打错而已。实际过程中没有这个错误
------其他解决方案--------------------
昨天太晚了,没说清楚,根据返回值判断都是1000个啊。
public static bool Add(Int64 id)
{
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter{ ParameterName="@id", SqlDbType= SqlDbType.BigInt,Value= id}
};
return Convert.ToBoolean(SqlHelper.ExecuteScalar("V_Insert", CommandType.StoredProcedure, param));
}
if (!Sql.Visit.Add(id))
{
lock (loginLock1)
{
recordTotal++;
}