Ist es möglich, in SQL Server 2012 etwas Ähnliches wie das Folgende zu tun?
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
Ich habe versucht, diese Syntax zu verwenden, und eine Fehlermeldung erhalten. Wenn dies nicht möglich ist, wäre die Verwendung einer temporären Tabelle der beste Weg, um dies zu erreichen?
sql-server
cte
Weston Sankey
quelle
quelle
IF EXISTS (SELECT * FROM table)
?WHERE rn = 2
IF EXISTS (SELECT column FROM dbo.table GROUP BY column HAVING COUNT(*)>1)
Antworten:
Ein CTE kann nicht als Unterabfrage verwendet werden. Eine Problemumgehung wäre:
Ein anderer wäre:
Selbst wenn Ihre vorgeschlagene Syntax gültig wäre,
EXISTS
würde das in diesem Fall ohnehin nicht kurzschließen, würde ich denken (und ich vermute, dass Sie sie deshalb verwenden möchten), da die Fensterfunktion über den gesamten Satz hinweg materialisieren muss, bevorrn
dies möglich ist gefiltert werden.quelle
Eine andere Option ist die Verwendung einer Variablen:
quelle
Ich denke, Sie können Code wie folgt verwenden:
Das Bedingungsergebnis kann als Variable gespeichert werden.
quelle