是否可以避免在 SQL Server CTE 中指定列列表?

问题描述 投票:0回答:2

是否可以避免在 SQL Server CTE 中指定列列表?

我想从具有许多列的表创建一个 CTE,以便结构相同。可能有一种方法可以完成此任务,而无需重新列出每个列名称。

我已经尝试过(不成功):

with pay_cte as
(select * from payments)
select * from pay_cte

msdn 文档中的这句话让我的探索受到了鼓励: 仅当查询定义中提供了所有结果列的不同名称时,列名称列表才是可选的。

https://msdn.microsoft.com/en-us/library/ms175972.aspx
sql sql-server common-table-expression
2个回答
12
投票

是的,假设您的意思是不必为

with cte(Col1, Col2) as
部分中的每一列命名。

您可以通过一个非常简单的测试查询自己轻松尝试:

with cte as
(
    select *
    from sys.tables
)
select *
from cte

0
投票

@iamdave 是一个简单明了的答案,但并不总是有效。

我发现如果列没有名称或重复列,它将失败。

在这些情况下,需要列名称。然而,他们所需要做的就是像插入语句一样排队。

With X_CTE (dateEdit, dateCreated, customer, createdBy, contactPerson, type, status,datePublished, editedBy, invalidated) as 
(
    SELECT GETDATE(), GETDATE(), 'ERS','SYSTEM',en.person, 'Email', 'Final', en.dateEdit, en.person, 0
        FROM entry as en Join 
        entryClass as ec on en.entryID = ec.entryID join 
        classifications as cl on ec.classID = cl.classID
        WHERE en.[invalidated] = 0 and cl.classType = 'beeep' and intelCode = 'AT1'
)
select * from ERS_Email_CTE

但是,“as statements”对于防止错误可能很有价值。

© www.soinside.com 2019 - 2024. All rights reserved.