¿Es posible hacer algo similar a lo siguiente en 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
Intenté usar esta sintaxis y recibí un error. Si esto no es posible, ¿usar una tabla temporal sería la mejor manera de lograr esto?
sql-server
cte
Weston Sankey
fuente
fuente
IF EXISTS (SELECT * FROM table)
?WHERE rn = 2
IF EXISTS (SELECT column FROM dbo.table GROUP BY column HAVING COUNT(*)>1)
Respuestas:
Un CTE no se puede usar como una subconsulta. Una solución alternativa sería:
Otro sería:
Incluso si su sintaxis propuesta fuera válida, de
EXISTS
todos modos no se produciría un cortocircuito en ese caso, creo (y sospecho que es por eso que querría usarla), ya que la función de ventana debe materializarse en todo el conjunto antes de quern
pueda ser filtradofuente
Otra opción es usar una variable:
fuente
Creo que puedes usar un código como este:
El resultado de la condición se puede almacenar como una variable.
fuente