关于sqlserver7.0与2000版之间处理视图的一点不同(100分)

  • 主题发起人 主题发起人 吴珂
  • 开始时间 开始时间

吴珂

Unregistered / Unconfirmed
GUEST, unregistred user!
最近单位里原来的服务器坏了,就换了台服务器,顺便把原来的英文版sqlserver7.0
给换成了sqlserver2000的中文版,这样看帮助也方便点.
完成后程序的运行一切没有问题,但过了两天统计报表时却发现结果不正确,经仔细查找
原因,原来是一个view的问题,这个view非常简单,只是一句:
"select top 1 * from table1"
然后在程序中调用:select f1,f2 from view1 where f1='aa'
如果是在7.0中,那么如果table1中有f1='aa'的记录,那么结果集中就有该条记录
但在2000中,只要该记录不是top 1,那么结果集总为空
也就是说7.0执行的是"select top 1 f1,f2 from table1 where f1='aa'
而2000执行的是"select f1,f2 from (select top 1 * from table1) where f1='aa'
请问大家是否在2000中有何选项或设置可以让它和7.0一样吗?

 
对吗?原来的7。0和现在的2000有那么大的差别,我觉得是不可能的,只选一条用
sql语句就可以了
 
在sql server enterprise manager中,设置数据库属性(数据库名上 -> 左键):
在选项中,设置数据库的兼容级别为7.0。
8。0就是sql server2000
 
to ugvanxk:
当然,这里我简化了实际的情况,以便于描述,但无损于问题的实质.
to tinyint:
我明天去单位里试一下,对的话就加分:-)
 
to tinyint:
不行啊,是把数据库的兼容级别设为70吧?
可是还是一样,我曾经把数据库服务停止然后重新运行,结果还是一样.
 
可能不是兼容级别的问题
看看别的高人有没有办法。
 
>>也就是说7.0执行的是"select top 1 f1,f2 from table1 where f1='aa'
>>而2000执行的是"select f1,f2 from (select top 1 * from table1) where f1='aa'
我在 SQL Server 2000 中测试过,不存在该问题,跟 7.0 的一样。只是 SQL Server 2000 中的
存储过程的返回值 RETURN_VALUE 改成了 @RETURN_VALUE。
 
为了排除其他因素的影响,我特意在自已的机子上装了2000的服务端
然后分别在7.0和2000的northwind数据库(sqlserver自带示例数据库)中建立view1:
select top 1 * from customs
分别在查询分析器中执行 select * from view1 where city='London'
结果在7.0中会返回city='London'的一条记录,而2000没有
to Qiuliang:
不知道你试验的结果是有返回还是没有返回,如果是没有,那也许是我这里的7.0有设
了什么选项
 
to 吴珂:
>>分别在7.0和2000的northwind数据库(sqlserver自带示例数据库)中建立view1:
>>select top 1 * from customers
>>分别在查询分析器中执行 select * from view1 where city='London'
>>结果在7.0中会返回city='London'的一条记录,而2000没有
对不起,开始没看清楚你的问题。刚才在 2000 中测试了一下,没返回任何记录。其实,
按这样的操作,不返回任何记录才是正确的。因为 View1 中本来就只包含 customers 中的
第一条记录,而且该记录的 city 不等于 'London'。由于手边没有 SQL Server 7.0,因此
不能在 7.0 中测试。如果在 7.0 中如你所说得出那样的结果的话,那可能是 7.0 跟 2000
处理视图的方法不同。对于这种问题,只能采用其他方法或修改程序绕过。
 
是的,根据最简单的理解应该是view先运行,取第一条记录,然后其它语句都在这个
基础上运行,但在7.0中确实能够得到一条结果,所以我只能理解为7.0和2000在这里
确实有点不同,谢谢大家.
 
多人接受答案了。
 
后退
顶部