Поведение с жутким запросом: тот же запрос, разные результаты в представлении - PullRequest
0 голосов
/ 08 мая 2019

Один и тот же запрос дает разные результаты, когда он находится внутри View.

Я пытался заставить те же самые кодовые страницы, те же типы данных, выражения Common Query ... ни один не работал.

Посмотрите наэтот простой запрос:

SELECT TOP 100 CompanyID, SubsidiaryID 
FROM STAGING.SALESAX S
INNER JOIN Subsidiary SU
ON S.CompanyID = SU.SubsidiaryAXCode

Возвращает все ожидаемые 100 строк.

Если я использую EXACT SAME QUERY в представлении:

CREATE VIEW [STAGING].[VSalesAXBASE]    
AS    
SELECT TOP 100 CompanyID, SubsidiaryID 
FROM STAGING.SALESAX S
INNER JOIN Subsidiary SU
ON S.CompanyID = SU.SubsidiaryAXCode

GO

SELECT * FROM [STAGING].[VSalesAXBASE]

, он возвращает 0 ROWS

screenshots of me running the query in two ways

Screenshot of query updated without TOP Statement

Ответы [ 3 ]

2 голосов
/ 08 мая 2019

Вы ставите SALESAX таблицу с STAGING., но не ставите Subsidiary таблицу в запросе. Делайте префикс всех таблиц в запросе.

Одна возможность состоит в том, что существует несколько Subsidiary таблиц, и запрос использует другую таблицу в контексте представления.

Кстати, хорошей практикой также является добавление префиксов к именам таблиц в части запроса SELECT. Например, сейчас трудно понять, из какой таблицы (таблиц) происходят столбцы CompanyID и SubsidiaryID.

0 голосов
/ 08 мая 2019

SQL не гарантирует упорядочение результатов, если не используется явное предложение Order By.

0 голосов
/ 08 мая 2019

Решением было добавить схему DBO во вспомогательную таблицу .. благодаря предложениям @VladimirBaranov, @IMSoP и @Augustina (Codec)

Похоже, что контекст выполнения представления может отличаться от текущего пользователя (необходимо проверить больше).

Решение

...