У меня было старое представление, которое выдавало некоторые странные данные, когда я запрашивал их. Два из его столбцов, C и D, имели копию данных из столбцов A и B соответственно. Таким образом, у C была копия данных A, а у D - копия данных B. Когда я извлек запрос, используемый представлением, и запустил его автономно, все было в порядке. Столбцы A, B, C и D имели данные, которые я ожидал увидеть. Когда я посмотрел на определение представления, то заметил, что в нем есть несколько символов подстановки (*) для выбора столбцов, например:
SELECT
TableX.*,
TableY.*
FROM
X AS TableX INNER JOIN
Y AS TableY ON TableX.PK = TableY.FK
Мне сказали никогда не использовать подстановочные знаки в представлениях по различным другим причинам, но мне было интересно, почему это имеет такой эффект? Я заметил, что когда я воссоздаю представление и выполняю запрос на выборку, все в порядке. Один из старших разработчиков сообщил мне, что проблема возникает из-за некоторого кэширования, которое выполняет Sql Server, но я надеялся на более подробный ответ.