T-Sql

在 WITH 子句之後使用 IF 語句

  • July 17, 2018

我想為 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

不,你不能那樣做。你最好的選擇是給你的頂級變數一個非常高的預設值。

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

WITH聲明一個 CTE,您可以在1 個語句中使用它(如 a SELECTINSERTUPDATE等)。

AnIF是一種控制流機制,用於分隔語句(或語句塊),因此您不能聲明 CTE 並有條件地在多個語句中引用它。

您可以嘗試@TopCountSELECT.

IF @TopCount IS NULL OR @TopCount < 1
   SET @TopCount = POWER(2, 30) -- A big enough number (careful with overflows!)

WITH
  alias AS (...)
SELECT TOP (@TopCount) * FROM alias;

引用自:https://dba.stackexchange.com/questions/212300