我有个存储过程,功能如下:先从1个EXCEL文档中导入数据到1个临时表,然后用游标循环该临时表进行一些操作,然后关闭游标,显示临时表中的数据,删除临时表。为什么每次在执行了这个存储过程后,执行sp_lock会看到多了很多记录,这个时候在查询分析器执行很简单的select都会要很久,基本上是一直等待,需要重启SQLserver才能继续,请问这是什么原因,是哪里会自动加锁的?

解决方案 »

  1.   

    --访问excel文件
    select * from openrowset('microsoft.jet.oledb.4.0','excel 5.0;hdr=no;imex=1;database=d:\test.xls',sheet1$)--访问临时表加with (nolock)select * from #t with (Nolock)
      

  2.   

    to:wangtiecheng我访问excel是用的OpenDataSource,请问访问excel加什么标可以让SQL不加锁,是hdr=no;吗
      

  3.   

    访问临时表应该不会影响别的吧。
    sp_lock查出来的是什么锁?加锁的对象是什么?
      

  4.   

    访问excel好像没有不加锁的选项
      

  5.   

    使用游标后本来就会开很多很多很多锁,既然LZ是用的临时表,那么在临时表加上一个IDENTITY用 while 循环也可以做
      

  6.   

    那请问临时表加上with (nolock)是值的那些锁?sp_lock查询出来的是些什么锁了?
      

  7.   

    为什么每次在执行了这个存储过程后,执行sp_lock会看到多了很多记录
    ----------------------
    把结果贴出来看看啊
      

  8.   

    51 12 0 0 DB                  S GRANT
    51 1 85575343 0 TAB                  IS GRANT
    52 12 5575058 0 TAB                  IX GRANT
    52 12 0 0 DB                  S GRANT
    52 12 5575058 2 KEY (6d018b3519c6)   X GRANT
    52 12 5575058 2 KEY (dd0032934a1f)   X GRANT
    52 12 1141579105 1 KEY (2b00dc0888a9)   X GRANT
    52 12 1141579105 1 PAG 1:151            IX GRANT
    52 12 1141579105 0 TAB                  IX GRANT
    52 12 5575058 2 PAG 1:167            IX GRANT
    52 12 5575058 1 PAG 1:189            IX GRANT
    52 12 5575058 1 KEY (d8004334cc30)   X GRANT
    52 12 5575058 1 PAG 1:206            IX GRANT
    54 12 0 0 DB                  S GRANT