T-Sql
在 WITH 子句之後使用 IF 語句
我想為 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 個語句中使用它(如 aSELECT
、INSERT
、UPDATE
等)。An
IF
是一種控制流機制,用於分隔語句(或語句塊),因此您不能聲明 CTE 並有條件地在多個語句中引用它。您可以嘗試
@TopCount
在SELECT
.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;