Я очень рад, используя *
в триггерах аудита.
В этом случае он может действительно доказать свою выгоду, поскольку он будет гарантировать, что если дополнительные столбцы будут добавлены в базовую таблицу, это вызовет ошибку, поэтому нельзя забывать иметь дело с этим в триггере аудита и / или структуре таблицы аудита .
(Как и dotjoe ) Я также счастлив использовать его в производных таблицах и выражениях таблиц столбцов. Хотя я обычно делаю это наоборот.
WITH t
AS (SELECT *,
ROW_NUMBER() OVER (ORDER BY a) AS RN
FROM foo)
SELECT a,
b,
c,
RN
FROM t;
Я в основном знаком с SQL Server, и, по крайней мере, оптимизатор без проблем распознает, что потребуются только столбцы a,b,c
, а использование *
во внутреннем выражении таблицы не приводит к ненужным операциям извлечения и отбрасывание ненужных столбцов.
В принципе SELECT *
должно быть в порядке в представлении, так как он является окончательным SELECT
в представлении, где его следует избегать, однако в SQL Server это может вызвать проблемы, поскольку он хранит метаданные столбцов для представлений, которые не обновляется автоматически при изменении базовых таблиц, и использование *
может привести к сбивающим с толку и неверным результатам, если только sp_refreshview
не запущен для обновления этих метаданных.