是否可以在 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
Run Code Online (Sandbox Code Playgroud)
我尝试使用此语法并收到错误消息。如果这是不可能的,使用临时表是实现此目的的最佳方法吗?
Aar*_*and 10
CTE 不能用作子查询。一种解决方法是:
IF EXISTS
(
SELECT 1 FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn
FROM table
) AS DATA
WHERE rn = 2
)
BEGIN
...
END
Run Code Online (Sandbox Code Playgroud)
另一个是:
IF EXISTS (SELECT 1 FROM dbo.table GROUP BY column HAVING COUNT(*) > 1)
BEGIN
...
END
Run Code Online (Sandbox Code Playgroud)
即使你提出的语法是有效的,该EXISTS
会在这种情况下,不短路,无论如何,我认为(我怀疑这就是为什么你会想使用它),因为之前的窗口函数必须兑现了全套rn
能被过滤。