在sql语句中建立一张临时表, 再通过select语句 往临时表表内insert ,根据返回行判断记录是否存在sql 语句如下:  
 string sql = "DECLARE @T TABLE (id int) INSERT @T SELECT 1 FROM TBL WHERE ID = 1"用SqlCommand.ExecuteNonQuery 判断返回行数, 大于0 即表内存在 ID 为 1的记录不知道这种方法和判断返回结果集的方法哪个好

解决方案 »

  1.   

    我猜测,@T 临时表的速度会慢些
    因为临时表的方法是将检索出的结果,往一块内存区域中写入了一些内容,而 ExecuteNonQuery 显然没有写,结果不言自明我做了个实验
    我假设 ID = 1 的命中记录有100万条,在此条件下进行了测试,发现,@T 使用的时间在 0.7~0.9 秒之间
    而 ExecuteNonQuery 大约是 0.4~0.6 之间
      

  2.   

    判断记录是否存在,用ExecuteScalar返回记录数就可以了,画蛇添足只会更慢,写代码也累人。
      

  3.   


    如果是 SELECT TOP 1 FROM  ... 呢
      

  4.   


    if exists(select 1 from tb where id=@id)  -->@id是从外部传进来的
        select 1 as hasvalue
    else
        select 0 as hasvalue然后用ExecuteScalar返回的记录是1表示有记录存在,0表示记录不存在.
      

  5.   

    单考虑算法优劣 @t 的方法仍然慢,哪怕top 1,还是做了一个多余的insert步骤 慢0.0000001秒 也是慢
    我说的是单从算法优劣的角度考虑
    如果从应用层面考虑 因为人类感知不到0.0000001秒的延迟 所以没有区别