В MS SQL Server 2008 и новее, можно указать «буквальную» таблицу с использованием values
как подзапрос:Как я могу конкретно указать таблицу «literal» в CTE?
select * from (
values (1,2),
(3,4)
) as foo(bar,baz)
Однако, я не понял, разумный способ указать это в пункте with
(КТР).
Я надеялся, что следующий будет работать, потому что он прекрасно работает в постоянно программистом дружественных PostgreSQL ... но она дает синтаксическую ошибку с SQL Server:
with foo(bar,baz) as (
values (1,2),
(3,4)
)
select * from foo;
Эта альтернативная форма работает но кажется чрезмерно излишним и подвержены ошибкам:
with foo as (
select * from (
values (1,2),
(3,4)
) as foo(bar, baz)
)
select * from foo;
есть ли более емкий способ определить буквенную таблицу в КТРЕ, в сервере SQL?
Нет, в CTE нет хорошего пути. Этот ненужный SELECT меня раздражает! –
Это в значительной степени и довольно стандартно для всех РСУБД. Похоже, что люди всегда хотят больше лаконичности в SQL, но это очень подробный язык, где часто бывает более явным выходом лучших результатов. – JNevill
Правда. Наверное, я испорчен PostgreSQL, который на самом деле пытается сделать очевидные вещи такими, как это легко. : -/ –