在 WITH 子句后使用 IF 语句

uza*_*y95 6 t-sql

我想为 SELECT 语句创建别名,但随后我想用 TOP 子句限制结果集。如果过程 TopCount 参数大于 0,我想用 TOP 子句放置限制结果集。

但是在 WITH 子句之后,IF 语句产生了错误。我可以在 WITH 子句之后继续使用 IF 或与 SELECT 语句不同吗?

WITH
   alias AS (...)
IF @TopCount>0
   SELECT TOP (@TopCount) * FROM alias;
ELSE
   SELECT * FROM alias;
GO
Run Code Online (Sandbox Code Playgroud)

Eri*_*ing 5

不,你不能那样做。你最好的办法是给你的顶级变量一个非常高的默认值。

CREATE PROC dbo.if_branch (@top INT = 2147483647)
AS 
BEGIN

WITH d AS 
    (
        SELECT *
        FROM sys.databases AS ds
        WHERE ds.name = 'tempdb'
    )
SELECT TOP (@top) *
FROM d;

END
Run Code Online (Sandbox Code Playgroud)