你PRINT出来看看是什么结果不就知道了?

解决方案 »

  1.   

    试一下,你的@a定义的长度太短了,另外每个insert加个分号declare @i int
    declare @a varchar(max)
    set @i=1
    while @i<101
    begin
    set @a='insert into qq (a,b,c,d)select a,b,c,d from group'+cast(@i as varchar(3))+';'
    set @i=@i+1
    exec(@a)
    end
      

  2.   

    发不了贴,借贴请教个问题。
    一表出毛病啦,不能insert,不能select
    select with(nolock)能查出来
    应该怎么弄呢
      

  3.   

    create table dbo.qq
    (
     a int ,
     b int,
    c int,
    d int
    )
    gocreate table dbo.group1
    (
     a int ,
     b int,
    c int,
    d int
    )
    go
    create table dbo.group2
    (
     a int ,
     b int,
    c int,
    d int
    )
      

  4.   

    怎么查出并解决呢。
    没啥代码啊
    就是
    insert 。into t_item values ...
    就一条数据,然后就一直执行,select也是一样。
      

  5.   

    在你insert的那句的那个界面里面执行:
    SELECT * FROM sys.dm_os_waiting_tasks WHERE session_id=@@spid
    然后贴图
      

  6.   

    换这个试试SELECT  t1.session_id ,
            t1.request_id ,
            t1.task_alloc ,
            t1.task_dealloc ,
            t2.sql_handle ,
            t2.statement_start_offset ,
            t2.statement_end_offset ,
            t2.plan_handle
    FROM    ( SELECT    session_id ,
                        request_id ,
                        SUM(internal_objects_alloc_page_count) AS task_alloc ,
                        SUM(internal_objects_dealloc_page_count) AS task_dealloc
              FROM      sys.dm_db_task_space_usage
              GROUP BY  session_id ,
                        request_id
            ) AS t1 ,
            sys.dm_exec_requests AS t2
    WHERE   t1.session_id = t2.session_id
            AND ( t1.request_id = t2.request_id )
            AND t1.session_id = 98
    ORDER BY t1.task_alloc DESC
      

  7.   

    select text from sys.dm_exec_sql_text(@sql_handle)
    select * from sys.dm_exec_query_plan(@plan_handle)
    把那两串handle的值贴近上面对应的地方,看看具体是什么语句
      

  8.   

    额,看错了,原来你新开了窗口,换这个吧:
    select * from sys.sysprocesses where blocked<>0
      

  9.   

    select * from sys.sysprocesses where spid=56
      

  10.   

    kill 56,如无意外你可以继续insert了
      

  11.   

    56 open tran=1,也就是开启了事务未提交,所以其他事务需要waiting
      

  12.   

    按照28楼的图,59需要申请waitresource里面的那个资源,但是被56占住了,结果就阻塞了。
      

  13.   

    问题依旧,t_item表还是不能查询写入。
    select * from sys.sysprocesses where blocked<>0没有任何东西啦
      

  14.   

    USE 你的库名;
      GO
      DBCC CHECKTABLE ("t_item") WITH PHYSICAL_ONLY;
      GO
      
      

  15.   

    DBCC CHECKTABLE ("t_item") WITH PHYSICAL_ONLY
    没有任何出错信息
      

  16.   

    你先执行对t_item的insert操作,然后新开个窗口查select * from sys.sysprocesses where blocked<>0的结果
      

  17.   


    哦,这样的,执行的select,图如上
      

  18.   

    继续用上面的方法看看spid=115的发生了什么事
      

  19.   

    嗯,跟上面执行的结果一样,我把115kill啦,又能select啦,但是一启动程序,程序就是往这表里insert就又出这毛病啦。
    客户下班啦,得明天看啦。
    能是啥问题呢。前台程序一insert就犯这毛病
      

  20.   

    如果频繁出现,那就不是kill的问题了,而是要找到哪个操作产生了事务但又没有关闭,这个没有简单的步骤,只能一步一步细化,重点在设计和编码上
      

  21.   

    我之前也遇到过,是因为我们公司用的英文版本,而数据有繁体字,需要在查询分析器的“设置”中的钩选项“set implicit_transactions"(好像叫”自动转换“)去掉,结果有一天我执行脚本也是锁死,可其他用户好好的,后来尝试把那个一项目钩选后就可以正常执行脚本了,再后来我又把钩选去掉了,并没有出现锁死的问题,具体不知什么原因,不知有没有大侠解释一下这个现象。
    楼主要不也尝试一下改变设置中的钩选值。
      

  22.   

    还没查出来原因。
    几个问题。
    1.应该不是客户端程序的问题,因为程序连其他数据库好用,就连这个库有这毛病。怀疑是库有问题。
    2.通过阻塞的sql,能看出是什么问题不。跟踪的话,是不是应该能把这段sql跟踪出来,但我没跟出来。不知道是不是没跟明白还是怎样。
    3.我看跟踪说有跟踪lock的模版,这个跟踪好用不。我这没有,是版本的问题?好用的话,我升下试试。
    4.描述一下业务环境,是客户端录入物料,保存时出的错。那select * from 跟物料分类应该有关,那表定义不知道。
    还有个现象,因为物料是通过物料的编码区分分类的,如果没有分类的保存就没问题,有分类的就出这问题。
    版主再指点指点,谢谢啦
      

  23.   

    Profiler可以跟踪,但是最好限定在尽可能小的范围,不然带来更大的服务器压力