我有一种情况pb用的是9.0,服务器上装的是64位的sql2008,有一句SQL语句,用的是
SELECT * from a where a.x + a.y NOT IN ( b.x + b.y from b ),在pb9.0中执行就会造成类似于死锁的情况,我去看服务器上CPU运行100%,但是同样这句SQL在sql2000中就能执行成功,同样这句话在sql2008的服务器上也能执行成功,但在PB环境中就会造成服务器死机,有没有人碰到这种情况的?
...全文
29020打赏收藏
pb中不能用not in的问题
我有一种情况pb用的是9.0,服务器上装的是64位的sql2008,有一句SQL语句,用的是 SELECT * from a where a.x + a.y NOT IN ( b.x + b.y from b ),在pb9.0中执行就会造成类似于死锁的情况,我去看服务器上CPU运行100%,但是同样这句SQL在sql2000中就能执行成功,同样这句话在sql2008的服务器上也能执行成功,但在PB环境中就会造成服务器死机,有没有人碰到这种情况的?
to kenshu:我也知道这种写法很不合适。只不过这个程序和数据库6、7年下来都能正常运行所以也没有认真考虑用别的更好的替代的方法。目前准备升级服务器所以把SQL2000升级到SQL2008了。现在测试的过程中发现了这个问题,我刚刚计算了下这两张表的容量,虽然表的数据比较大,但无论如何也不应该产生死锁的情况。况且我在查询分析器中进行检索就很顺利,而pb中就会假死。由于问题没有找到,我不知道这样升级之后会不会还有别的问题会产生,所以我希望能够明确的找到语句不能执行成功的原因
数据库是我从2000移到2008上来的。所以不存在索引的问题。而且我后来加了索引结果还是一样。而且奇怪的是我在服务器上执行确实能够成功,只是在pb中执行不能成功。另外主贴上的SQL语句我贴错了可能会造成大家误解,我在这里重新贴一下SELECT * from a where a.x + a.y NOT IN ( select b.x + b.y from b ),
[Quote=引用 17 楼 angloy 的回复:]
to xuam:我也怀疑是驱动问题。因为我在pb中用MSS Microsoft SQL Server和ODBC都做了测试,结果发现ODBC中运行没有问题。貌似MSS Microsoft SQL Server驱动发生了错误。但是如果都改成ODBC又有点不甘心,程序要改了,而且每个客户端还得去配置。有没有好的办法解决?
[/Quote]
to xuam:我也怀疑是驱动问题。因为我在pb中用MSS Microsoft SQL Server和ODBC都做了测试,结果发现ODBC中运行没有问题。貌似MSS Microsoft SQL Server驱动发生了错误。但是如果都改成ODBC又有点不甘心,程序要改了,而且每个客户端还得去配置。有没有好的办法解决?