试一下,你的@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
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 )
在你insert的那句的那个界面里面执行: SELECT * FROM sys.dm_os_waiting_tasks WHERE session_id=@@spid 然后贴图
换这个试试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
select text from sys.dm_exec_sql_text(@sql_handle) select * from sys.dm_exec_query_plan(@plan_handle) 把那两串handle的值贴近上面对应的地方,看看具体是什么语句
额,看错了,原来你新开了窗口,换这个吧: select * from sys.sysprocesses where blocked<>0
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
一表出毛病啦,不能insert,不能select
select with(nolock)能查出来
应该怎么弄呢
(
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
)
没啥代码啊
就是
insert 。into t_item values ...
就一条数据,然后就一直执行,select也是一样。
SELECT * FROM sys.dm_os_waiting_tasks WHERE session_id=@@spid
然后贴图
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
select * from sys.dm_exec_query_plan(@plan_handle)
把那两串handle的值贴近上面对应的地方,看看具体是什么语句
select * from sys.sysprocesses where blocked<>0
select * from sys.sysprocesses where blocked<>0没有任何东西啦
GO
DBCC CHECKTABLE ("t_item") WITH PHYSICAL_ONLY;
GO
没有任何出错信息
哦,这样的,执行的select,图如上
客户下班啦,得明天看啦。
能是啥问题呢。前台程序一insert就犯这毛病
楼主要不也尝试一下改变设置中的钩选值。
几个问题。
1.应该不是客户端程序的问题,因为程序连其他数据库好用,就连这个库有这毛病。怀疑是库有问题。
2.通过阻塞的sql,能看出是什么问题不。跟踪的话,是不是应该能把这段sql跟踪出来,但我没跟出来。不知道是不是没跟明白还是怎样。
3.我看跟踪说有跟踪lock的模版,这个跟踪好用不。我这没有,是版本的问题?好用的话,我升下试试。
4.描述一下业务环境,是客户端录入物料,保存时出的错。那select * from 跟物料分类应该有关,那表定义不知道。
还有个现象,因为物料是通过物料的编码区分分类的,如果没有分类的保存就没问题,有分类的就出这问题。
版主再指点指点,谢谢啦