Имя столбца Аргументы в операторе «С» на SQL сервере - PullRequest
0 голосов
/ 08 апреля 2020

В онлайн-документе Microsoft (https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15) говорится, что в операторе «With» в качестве аргумента может быть указано имя столбца, а затем говорится, что:

» Список имен столбцов является необязательным, только если в определении запроса указаны разные имена для всех результирующих столбцов. "

Что означает" если на самом деле означают, что в определении запроса указаны разные имена для всех результирующих столбцов "? Я очень часто использую оператор «С», но никогда не указываю имена столбцов в аргументе.

Я пытался go просмотреть весь документ, но, похоже, нигде не объяснил это более подробно.

Кто-нибудь знает, в какую ситуацию мне нужно поставить, укажите название столбца?

Заранее спасибо!

1 Ответ

2 голосов
/ 08 апреля 2020

Проще говоря, набор результатов запроса, который определяет CTE, должен возвращать набор столбцов с разными именами. Например, следующее не будет работать:

with cte as (select 1 as x, 2 as x)
select * from cte; 

В наборе результатов есть 2 столбца с именем "x". В таком случае вы ДОЛЖНЫ указать имена столбцов в определении cte, поскольку запрос создает набор результатов с повторяющимися именами. Поэтому вам нужно будет использовать форму:

with cte(x, y) as (select 1 as x, 2 as x)
select * from cte; 

Как правило, для любого набора результатов рекомендуется, чтобы НЕ имели повторяющиеся имена столбцов.

...