是否可以避免在 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
是的,假设您的意思是不必为
with cte(Col1, Col2) as
部分中的每一列命名。
您可以通过一个非常简单的测试查询自己轻松尝试:
with cte as
(
select *
from sys.tables
)
select *
from cte
@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”对于防止错误可能很有价值。