/ / O que esta ONU significa? - sql-server, tsql

O que esta ONU significa? - sql-server, tsql

Eu queria fazer uma inserção com um sindicato e alguém sugeriu isso:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN

Funciona, mas qual é o UN? Infelizmente, pesquisando para "t-sql un" não é muito útil: p

Nota: eu descobri que você pode apenas fazer SELECT x INTO ##temp FROM y UNION ALL SELECT x FROM b mas eu ainda estou curioso sobre UN.

EDIT: Ok, então é um alias, mas por que é necessário para fazer este trabalho? Se eu removê-lo, ele não vai executar.

Respostas:

10 para resposta № 1

Não é uma palavra-chave. É um alias. Qualquer string poderia ter sido usada lá em vez de "UN".

De uma forma mais completa, é:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) AS UN

@Tomalak está correto. Nesse caso, o alias é obrigatório. Sem o alias, o erro é:

Msg 102, nível 15, estado 1, linha 2 Sintaxe incorreta perto de ")".

Eu simplifiquei um pouco a consulta e usei o banco de dados AdventureWorks:

SELECT * INTO ##temp
FROM (SELECT * FROM Person.Address)

isso recebe o erro acima. Em contraste:

SELECT * INTO ##temp
FROM Person.Address

funciona muito bem. Uma alternativa é

;WITH UN AS
(
SELECT * FROM Person.Address
)
SELECT * INTO ##temp
FROM UN

4 para resposta № 2

É necessário porque esta é uma tabela derivada e uma tabela derivada é necessária para ter um nome. Ganhou "este trabalho? Eu não vejo que você precisa da tabela derivada.

SELECT x
INTO #Temp
FROM y
UNION ALL
SELECT x
FROM z

Eu mudei para uma tabela temporária regular como os globais são geralmente uma má idéia como outra conexão pode afetá-los. Se você realmente precisa de um, então use-o, caso contrário, tenha muito cuidado ao usar tabelas temporárias gloabl.


3 para resposta № 3

É um alias neste contexto. Não há un Comando T-SQL. Você pode então referenciar seus campos com isso.

SELECT un.x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN

1 para resposta № 4

Nesse caso, UN é o alias do conjunto de resultados da subconsulta (o (SELECT x FROM y UNION ALL SELECT x FROM z)). Você pode substituir UN com o que você quiser, desde que não confunda o parser.


1 para resposta № 5

Tudo o que faz é alias (SELECT x FROM e UNION ALL SELECT x FROM z) para "UN"


0 para a resposta № 6

Um nome de alias / correlação fornece ao conjunto de resultadosnome temporário para que possa ser referenciado em outro lugar na consulta. Este exemplo mostra que o alias é necessário para poder referenciar os campos nas subconsultas nas cláusulas select e join. Se as subconsultas não tiverem aliases, o servidor não saberá de qual tabela obter o campo "y". Os aliases são obrigados a distinguir as duas funções diferentes das subconsultas.

select A.*, B.y
from
(select id, f, k, y from Table1) A
join
(select id, t, y, s from Table2) B
on A.id = B.id