【提问】插入数据前的查找重复,大家都是怎么做的【在线放分】
在插入一个数据前,需要对数据库中是否存在进行判断比如:插入一个人员的信息,需要查看此人是否已经存在
这样的一个过程是两次打开SQLCONNECTION吗?
第一次:使用SELECT进行重复性检查
第二次:进行插入操作
大家都是这样操作的吗? --------------------编程问答-------------------- 没错,就是这样做的~ --------------------编程问答-------------------- 用存储过程就只需要一个了 --------------------编程问答-------------------- 麦子,可以具体说一下吗
对存储过程不熟悉 --------------------编程问答-------------------- 不用存储过程也只需要一个.
INSERT INTO tablename (key, otherfields,...) values(keyvalue,othervalues,...)
WHERE NOT EXISTS(SELECT key FROM tablename WHERE key=keyvalue) --------------------编程问答-------------------- UP --------------------编程问答-------------------- 给表的字段建立唯一约束就可以了。
--------------------编程问答-------------------- 楼主问的是插入前吧? 不是插入时吧? --------------------编程问答-------------------- 用存储过程还是比较好的 --------------------编程问答-------------------- to:xs8577
插入之前进行的判断
防止出现重复的情况
to xuyugen
存储过程是不是就是把判断和插入,放在一起,实际上存储过程的内部也是先进行一个查询的判断,然后再进行一个插入的操作? --------------------编程问答--------------------
这个比较好 --------------------编程问答--------------------
--------------------编程问答--------------------
给你看个存储过程,就明白了
CREATE proc add_about
(
@Name varchar(50),
@iReturn int output
)
as
select * from abouts where WebName=@Name
if(@@rowcount>0)
begin
set @iReturn=0 --该值已存在,插入失败
end
else
begin
insert into abouts values(@Name)
set @iReturn=1 --插入成功
end
GO
一般这样写 --------------------编程问答-------------------- --------------------编程问答-------------------- 打开一次SQLCONNECTION也可以啊
先执行判断SQL,再根据结果执行插入SQL --------------------编程问答-------------------- using (SqlConnection conn = new SqlConnection(SqlHelper.DBConnectionString
{
string pd="select ID from tb where ID=3";
if(SqlHelper.ExecuteScalar(conn, CommandType.Text,pd)!=null)
{return -1;}
else
{
return SqlHelper.ExecuteNonQuery(conn, CommandType.Text, 插入SQL);
}
}
这样时要两此打开,但是这种方式还是可取的,
当然你可以写成一条SQL语句,就是判断和插入SQL语句组合在一起,比如:
if exists (select FormID from lcFormStyle where FormID =2)
insert into lcFormStyle ...
GO --------------------编程问答-------------------- 写存储过程. --------------------编程问答--------------------
四楼正解,我们是用的这个
补充:.NET技术 , ASP.NET