В чем проблема с использованием подстановочных знаков для выбора столбцов? - PullRequest
2 голосов
/ 18 ноября 2010

У меня было старое представление, которое выдавало некоторые странные данные, когда я запрашивал их. Два из его столбцов, 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, но я надеялся на более подробный ответ.

Ответы [ 5 ]

4 голосов
/ 18 ноября 2010

Одна из причин, по которой это плохо, потому что, если TableX и TableY имеют одинаковое имя столбца, в вашем результате будут конфликты имен столбцов.

Другая причина в том, что вы должны тянуть только те колонки, которые вам нужны. Если в таблице 75 столбцов, а вам нужно только 4, то вы извлекаете много ненужных данных, и эти дополнительные данные должны быть отправлены по проводному соединению в ваше клиентское приложение, чтобы это могло повлиять на производительность.

2 голосов
/ 18 ноября 2010

Из Книг Онлайн:

Если представление не создано с Предложение SCHEMABINDING, sp_refreshview должен быть запущен при внесении изменений в объекты, лежащие в основе представления о том, что влияет на определение зрения. В противном случае представление может привести к неожиданные результаты при запросе.

1 голос
/ 18 ноября 2010

Если новый столбец будет добавлен в таблицу, вы загрузите дополнительный (вероятно, не нужные данные) столбец.

1 голос
/ 18 ноября 2010
  • не определено.Если вы будете полагаться на определенный порядок столбцов, вы получите непредсказуемые результаты.
0 голосов
/ 18 ноября 2010
  1. Вы можете разбить случайный код, добавив новый столбец, если выберете имя, которое уже используется.

  2. Новые столбцы будут автоматически извлекаться из базы данных в случайных частях вашего приложения, а затем отбрасываться. Даже если они огромный BLOB.

  3. У вас нет простого способа узнать, где в вашем коде используется определенный столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...