当前位置:编程学习 > C#/ASP.NET >>

【提问】插入数据前的查找重复,大家都是怎么做的【在线放分】

在插入一个数据前,需要对数据库中是否存在进行判断
比如:插入一个人员的信息,需要查看此人是否已经存在

这样的一个过程是两次打开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
存储过程是不是就是把判断和插入,放在一起,实际上存储过程的内部也是先进行一个查询的判断,然后再进行一个插入的操作? --------------------编程问答--------------------
引用 4 楼 bwangel 的回复:
不用存储过程也只需要一个. 

INSERT INTO tablename (key, otherfields,...) values(keyvalue,othervalues,...) 
WHERE NOT EXISTS(SELECT key FROM tablename WHERE key=keyvalue)

这个比较好 --------------------编程问答--------------------

给你看个存储过程,就明白了
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
--------------------编程问答--------------------
引用 11 楼 leehniu 的回复:
SQL code
给你看个存储过程,就明白了
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

一般这样写 --------------------编程问答--------------------
引用 11 楼 leehniu 的回复:
SQL code
给你看个存储过程,就明白了
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 --------------------编程问答-------------------- 写存储过程. --------------------编程问答--------------------
引用 4 楼 bwangel 的回复:
不用存储过程也只需要一个. 

INSERT INTO tablename (key, otherfields,...) values(keyvalue,othervalues,...) 
WHERE NOT EXISTS(SELECT key FROM tablename WHERE key=keyvalue)

四楼正解,我们是用的这个
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,