Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
Передо мной стоит задача портировать приложение с MS SQL 7.0 на MS SQL 2000. Столкнулся со следующей проблемой:(. На MS SQL 7.0 есть VIEW типа:
create view SampleView
as
select top 10 sometable.*
from sometable

В программе по VIEW делается селект типа:
select * from SampleView where someField=someValue.

В результате возвращается 10 записей удовлетворяющие условию someField=someValue.

Таже самая вьюшка на MS SQL 2000 возвращает 0 записей, хотя данные под такое условие есть:( Можно сделать вывод, что MS SQL 7.0 сначала делает селект с условием, а потом делает TOP 10, в свою очередь MS SQL 2000 сначала делает TOP 10, а потом ищет в оставшихся записях:(

Народ, подскажите как в MS SQL 2000 сделать вьюшку, чтобы она работала так же как и на MS SQL 7.0, т.е. я сделал по ней селект, а она вернула бы мне только 10 записей, отфильтрованных по заданному в WHERE селекта условию?
26 ноя 03, 12:22    [433605]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Таже самая вьюшка на MS SQL 2000 возвращает 0 записей, хотя данные под такое условие есть:( Можно сделать вывод, что MS SQL 7.0 сначала делает селект с условием, а потом делает TOP 10, в свою очередь MS SQL 2000 сначала делает TOP 10, а потом ищет в оставшихся записях:(

Неправильный вывод - select top без order by может каждый раз возвращать произвольные записи. При наличии кластерного индекса скорее всего данные будут возвращаться в порядке, определенном этим индексом.
26 ноя 03, 12:26    [433619]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
А мне собственно и надо чтобы мне вернулись только 10 произвольных записей, удовлетворяющих условию.
26 ноя 03, 12:35    [433649]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
А мне собственно и надо чтобы мне вернулись только 10 произвольных записей, удовлетворяющих условию.
Ну так надо сначала выбрать записи удовлетворяющие условиям, а потом уже из них 10 произвольных. А не наоборот.
26 ноя 03, 12:44    [433672]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
Ну так надо сначала выбрать записи удовлетворяющие условиям, а потом уже из них 10 произвольных. А не наоборот.
А может как-то для этого можно вьюшку модернизировать?
26 ноя 03, 13:24    [433828]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Crimean
Member

Откуда:
Сообщений: 13148
У меня повторить не получилось:

create view v as select top 10 * from sysobjects


Все нормально создалось и все нормально работает при разных сортировках.
Может того, на SQL 2000 SP3a поставить для начала?
26 ноя 03, 13:25    [433833]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Igel
Member

Откуда:
Сообщений: 64
2Crimean: а теперь попробуй

select * from v
select * from v where id>20

на SQL2000 второй запрос возвращает пустую выборку (правда у меня SP2), на SQL70 - оба запроса возвращают по 10 записей, но разных.
26 ноя 03, 13:38    [433886]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
2Crimean: а теперь попробуй
select * from v
select * from v where id>20
на SQL2000 второй запрос возвращает пустую выборку (правда у меня SP2), на SQL70 - оба запроса возвращают по 10 записей, но разных.

Вот у меня такая же проблема:( Может дело в каких-то системных настройка сервера?
26 ноя 03, 13:43    [433906]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Igel
Member

Откуда:
Сообщений: 64
2Vadim Fedorov: вряд-ли. Скорее всего в SQL2000 просто более логичным сделали работу view в этой ситуации. Ни где же не было документировано что в такой ситуации сработает именно так, как работает? Значит можно исправить :)
26 ноя 03, 13:51    [433941]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
2Vadim Fedorov: вряд-ли. Скорее всего в SQL2000 просто более логичным сделали работу view в этой ситуации. Ни где же не было документировано что в такой ситуации сработает именно так, как работает? Значит можно исправить :)
Например как?
26 ноя 03, 14:57    [434165]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Да. Пустая выборка.
Но, смотри - если говоришь "select * from v", то в ответ выпадают Ид от 1 до 12. Представление уже скомпилено. Если просишь where id > 20 то вполне резонно получаешь пустую выборку. Вполне закономерный результат за неочевидное использование TOP :(
26 ноя 03, 17:15    [434577]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Vadim Fedorov
Member

Откуда:
Сообщений: 16
Да. Пустая выборка.
Но, смотри - если говоришь "select * from v", то в ответ выпадают Ид от 1 до 12. Представление уже скомпилено. Если просишь where id > 20 то вполне резонно получаешь пустую выборку. Вполне закономерный результат за неочевидное использование TOP :(

Однако в MS SQL работает:(
26 ноя 03, 17:30    [434613]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 7.0 vs MS SQL 2000  [new]
Igel
Member

Откуда:
Сообщений: 64
2Vadim Fedorov:
...Ни где же не было документировано что в такой ситуации сработает именно так, как работает? Значит можно исправить :)
Например как?

Исправить - в смысле могут изменить работу сервера и никому не сказать. :)
27 ноя 03, 07:24    [435169]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить