msgbartop
SQL Server, Dicas, Rails, Mobile
msgbarbottom

27 Mar 09 SQL Server – Cross Apply

Olá pessoal,
Hoje falaremos sobre cross aply que é um código do T-SQL para junção(Join).
- Qual é o problema que enfrentamos?
- Onde o cross apply entra?

O maior problema de hoje é quando vamos utilizar subquerys, ex:
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS JOIN
(SELECT Endereco, Numero FROM tbComplementos WHERE iduser = usuario.iduser) compl

Quando a utilização é parecida com a de cima, retorna erro que a variavel esta fora do escopo ou que a variável não pode ser vinculada, porque o T-SQL usado com inner, right ou left join,  não aceita subquery de tabela derivada.

É ai que o CROSS APPLY entra, na troca do CROSS JOIN para CROSS APPLY a sua SQL vai funcionar perfeito.
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS APPLY
(SELECT Endereco, Numero FROM tbComplementos WHERE iduser = usuario.iduser) compl

Isso vale pra quando você for usar alguma função, ex:
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS JOIN dbo.fnComplementos(usuario.iduser) compl

aqui vai retornar o mesmo erro citado no primeiro item.

mas ao mudarmos para CROSS APPLY, volta a funcionar.

SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS APPLY dbo.fnComplementos(usuario.iduser) compl

Bom pessoal, é isso quem tiver dúvidas pode me mandar e-mail ou comenta ai.

Referência: http://sqlserver-brasil.blogspot.com/2008/08/t-sql-cross-apply.html

Marcelo

Tags: , ,

Leave a Comment

Spam Protection by WP-SpamFree