+ -
当前位置:首页 → 问答吧 → 求助:SQL 数据快速判断

求助:SQL 数据快速判断

时间:2011-12-06

来源:互联网

现在做的项目要求在数据库中添加数据,添加之前需要判断数据是否存在。例如数据A,我首先使用
select * from Table where value = A;
然后判断得到的数据的行数,如果=0,那么我认为没有数据,执行INSERT INTO 语句,添加数据。

但是现在发现这么做效率很低,一共100行数据,要3分钟才能完成。
而别人写的只需要3秒钟就可以完成。。。费解。

现在想知道是否有什么SQL语句可以直接判断某条数据是否存在,要比我遍历SELECT 快很多。
或者我是否需要根据A的内容用LIKE语句先获取一个表,然后在这个表内做遍历查询?

作者: wdlwlf   发布时间: 2011-12-06

如果是SQL SERVER的话,可以这样

SQL code

if not exists(select * from Table where value = A)
    insert into .....

作者: sdfkfkd   发布时间: 2011-12-06

不如写个存储过程

作者: bdmh   发布时间: 2011-12-06

这数据任何表都不可存在!!!!那就啰嗦了,只能双重循环,先查 sysobjects type='user'表,然后循环列 systcolumns 。
然后再拼接sql语句,看是否能查到,查到就break循环。

作者: Tsapi   发布时间: 2011-12-06

#1方法可行

作者: linkiforward   发布时间: 2011-12-06

求教1#方法,是否会比我直接用SELECT快很多? 现在主要是在效率上差太多了

还有个很丢脸的问题,是否这句可以像下面这么写;
string select = " if not exists (select * from "+Table" where value = "+A+") insert into "+Table + " ( value ) values ( "+A_")";

如果执行结果返回行数是0,说明没有写入?

作者: wdlwlf   发布时间: 2011-12-06

引用 5 楼 wdlwlf 的回复:

求教1#方法,是否会比我直接用SELECT快很多? 现在主要是在效率上差太多了

还有个很丢脸的问题,是否这句可以像下面这么写;
string select = " if not exists (select * from "+Table" where value = "+A+") insert into "+Table + " ( value ) values ( "+A_")";
……

是的,ExecuteNonQuery返回的是受影响的行数,对于insert就是插入记录的行数
还有,你可以将10条或者20条语句一起传给SQL执行
例如
string sql="insert into table1... ; insert into table2... ; insert into table3 .. ;";
对于数据较多的情况效果比较明显

作者: sdfkfkd   发布时间: 2011-12-06

StringBuilder sb=new StringBuilder();
if(无)
{
  sb.Append("insert.....");
}
else
{
  sb.Append("....");
}

string sql=sb;

作者: zyloveyrf   发布时间: 2011-12-06

谢谢!这个问题可能明天才会有结果。

作者: wdlwlf   发布时间: 2011-12-06