É possível fazer algo semelhante ao seguinte no SQL Server 2012?
IF EXISTS (
WITH DATA AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn
FROM table )
SELECT *
FROM DATA
WHERE rn = 2 )
BEGIN
...
END
Tentei usar esta sintaxe e recebi um erro. Se isso não for possível, o uso de uma tabela temporária seria a melhor maneira de fazer isso?
sql-server
cte
Weston Sankey
fonte
fonte
IF EXISTS (SELECT * FROM table)
?WHERE rn = 2
IF EXISTS (SELECT column FROM dbo.table GROUP BY column HAVING COUNT(*)>1)
Respostas:
Um CTE não pode ser usado como uma subconsulta. Uma solução alternativa seria:
Outro seria:
Mesmo que a sua sintaxe proposta fosse válida, a
EXISTS
não seria curto-circuito, nesse caso, de qualquer maneira, eu acho que (e eu suspeito que é por isso que você gostaria de usá-lo), pois a função de janela deve materializar sobre o conjunto completo antesrn
podia ser filtrado.fonte
Outra opção é usar uma variável:
fonte
Eu acho que você pode usar código como este:
O resultado da condição pode ser armazenado como uma variável.
fonte