результаты просмотра отличаются от того же кода, что и запрос - PullRequest
2 голосов
/ 20 июля 2011

У меня есть простой выбор с одним внутренним запросом соединения. Однако, когда я создаю представление с тем же кодом, результаты отличаются. Я не получаю данные из просмотров. Это все на основе пользовательских таблиц.

QUERY:

SELECT DISTINCT TOP 100 
dbo.table1.a1,
dbo.table1.a2,
dbo.table2.something_else  FROM dbo.table1 inner join 
dbo.table2 ON 
dbo.tabel1.a1 = dbo.table2.somethingelse
WHERE dbo.table.a2 = '1'
ORDER BY dbo.table.a1 DESC

ВИД:

CREATE VIEW TEST
AS

SELECT DISTINCT TOP 100 
dbo.table1.a1,
dbo.table1.a2,
dbo.table2.something_else  FROM dbo.table1 inner join 
dbo.table2 ON 
dbo.tabel1.a1 = dbo.table2.somethingelse
WHERE dbo.table.a2 = '1'
ORDER BY dbo.table.a1 DESC

Когда я сравниваю результаты запроса с представлением, они кажутся разными. У VIEW больше результатов, чем у запроса, и порядок не тот (из-за того, что в VIEW больше записей, чем у запроса.) Это тот же код, так как же он может отличаться?

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Вообще говоря, ORDER BY и связанные операторы не допускаются при создании представления.Проще говоря, результаты возвращаются в неопределенном порядке из представления.Вероятно, именно поэтому вы не ограничиваете верхние 100 строк, потому что строки не упорядочены.

Извлеките ваш порядок и количество строк в оператор, который выбирается из представления, и посмотрите, работает ли он.

2 голосов
/ 20 июля 2011

Я предполагаю, что вы говорите об этом запросе:

SELECT  DISTINCT TOP 100 PERCENT
        dbo.table1.a1,
        dbo.table1.a2,
        dbo.table2.something_else
FROM    dbo.table1
JOIN    dbo.table2
ON      dbo.tabel1.a1 = dbo.table2.somethingelse
WHERE   dbo.table.a2 = '1'
ORDER BY
        dbo.table.a1 DESC

В этом случае SQL Server просто оптимизирует часть ORDER BY при запуске представления.

Вы должны явно добавить его в запрос, который вызывает представление:

SELECT  *
FROM    test
ORDER BY
        a1 DESC
...