这个联合国是什么意思?

Rei*_*ica 2 t-sql sql-server

我想插入一个工会,有人建议:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN
Run Code Online (Sandbox Code Playgroud)

它有效,但是什么UN?不幸的是,谷歌搜索"t-sql un"并不是很有帮助:p

注意:我发现你可以做,SELECT x INTO ##temp FROM y UNION ALL SELECT x FROM b但我仍然很好奇UN.

编辑:好的,所以它是一个别名,但为什么需要这个工作?如果我删除它,它将不会执行.

Joh*_*ers 10

它不是关键字.这是别名.可以在那里使用任何字符串而不是"UN".

更完整的形式是:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) AS UN
Run Code Online (Sandbox Code Playgroud)

@Tomalak是对的.在这种情况下,别名是必需的.没有别名,错误是:

消息102,级别15,状态1,行2'''附近的语法不正确.

我稍微简化了查询并使用了AdventureWorks数据库:

SELECT * INTO ##temp
FROM (SELECT * FROM Person.Address) 
Run Code Online (Sandbox Code Playgroud)

这会收到上面的错误.相反:

SELECT * INTO ##temp
FROM Person.Address
Run Code Online (Sandbox Code Playgroud)

工作得很好.另一种选择是

;WITH UN AS
(
    SELECT * FROM Person.Address
)
SELECT * INTO ##temp
FROM UN
Run Code Online (Sandbox Code Playgroud)

  • @Brendan:在这种情况下,别名它绝对*是*必需的.由于SELECT无法使用匿名表,因此必须为内部查询的结果指定名称.如果您从实际的表或视图中进行选择,它们已经有了一个名称,因此有时候给它们一个别名很方便,但是可选. (4认同)