我想为 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)
不,你不能那样做。你最好的办法是给你的顶级变量一个非常高的默认值。
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)