首页 新闻 会员 周边 捐助

sqlserver返回记录集问题

0
悬赏园豆:20 [已解决问题] 解决于 2010-07-26 21:11

SELECT  * FROM  XXX WITH ( TABLOCKX )

用了表锁以后,导致我最后返回的数据集里面有SELECT  * FROM  XXX,真搞不懂sqlserver还这样的,

我其实只是想返回这一个数据集  select  * from #DDDTEMP

请问有什么办法让第一个锁表操作的数据集不返回。

 

冰之印记的主页 冰之印记 | 初学一级 | 园豆:10
提问于:2010-07-25 10:50
< >
分享
最佳答案
0

你又没用到这个表,为什么要锁它。Oracle能实现这样的需求,果然很强。

收获园豆:20
清海扬波 | 小虾三级 |园豆:825 | 2010-07-26 14:38
用到了,我省略500子了
冰之印记 | 园豆:10 (初学一级) | 2010-07-26 14:41
@冰之印记: 如果是这样的话,还真没什么好办法,你担心数据多的话,在后面加一个where 1=2好了。
清海扬波 | 园豆:825 (小虾三级) | 2010-07-26 14:49
我加了top 0 了 我对sqlserver不熟悉 一开始加了怕影响锁。哎 多个版本就是麻烦 老是好多数据库多要有。
冰之印记 | 园豆:10 (初学一级) | 2010-07-26 21:10
这分就给你吧
冰之印记 | 园豆:10 (初学一级) | 2010-07-26 21:11
其他回答(2)
0

使用表锁正常情况下应该没有这个"select * from XXX"才对。

 

use Agronet2008
go

select * from Product with (tablockx)

/*
P_ID P_Name P_E_ID CategoryID1
350674 铁观音 0 4029
350675 铁观音 0 4029
350676 铁观音 0 4029
350677 铁观音 0 4029
350678 铁观音 0 4029
350679 铁观音 0 4029
350680 铁观音 0 4029
350681 铁观音 0 4029
350682 高氮高钾型蔬菜专用复合肥 0 376
350683 asf 0 4
*/

 

邀月 | 园豆:25475 (高人七级) | 2010-07-25 20:59
那你sqlserver 数据库怎么锁表的?请教下好吗?
支持(0) 反对(0) 冰之印记 | 园豆:10 (初学一级) | 2010-07-25 21:00
@冰之印记:你的sql语句是如何的?跟你SQL Server的环境变更设置有关吗?
支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2010-07-25 21:17
SELECT * FROM 表明 WITH ( TABLOCKX ) 存储过程最后一句是:select maxId from #T_MaxIdTEMP; DROP TABLE #T_MaxIdTEMP 这样导致返回是2张表 一张就是第一次锁表的语句返回的记录集 ,整个表多返回,第二张表才是我想要的,我觉得这样有点不合理的了,我锁表操作的东西你给我返回来做什么呢,有办法清除吗,我这张表以后的数据量是巨大的,他要是也给我反悔,那效率可想而知了。oracle那边是没问题的 后来公司要个sqlserver 版本感觉问题就来了,实在不行 我只能在这个存储在套一个存储过程了。哎 sqlserver真是无语,可能是我对sqlserver不够了解吧
支持(0) 反对(0) 冰之印记 | 园豆:10 (初学一级) | 2010-07-26 10:00
0

看你是什么锁级别了.

所用的TABLOCKX 是表锁,别的sql是无法访问这个Table的.

changbluesky | 园豆:854 (小虾三级) | 2010-07-26 09:52
答非所问了大哥。
支持(0) 反对(0) 冰之印记 | 园豆:10 (初学一级) | 2010-07-26 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册