SQL Server 如何在后续IF语句中调用CTE

new9mtju  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(131)

我知道CTE后面必须跟着SELECTINSERTUPDATEDELETE陈述式。
那么,我应该如何在我的过程中使用这种逻辑呢?

CREATE PROCEDURE st_exemple
AS
    SET NOCOUNT ON
    (...)

    WITH CTE AS 
    (
        SELECT 
            'ID COTA'   = TABEL1.ID_COTA,
            'NM CLIENT' = TABLE2.NM_CLIENT
        FROM 
            (...)
        WHERE
            (...)
    );

    IF (SELECT COUNT(*) FROM CTE) = 0
    BEGIN
        SET @COMMENT = 'SELECT WTIHOUT DATA'
        GOTO END_PROC
    END;
    ELSE
    BEGIN
        SET @COMMENT = 'SELECT WITH DATA';
        GOTO END_PROC
    END;

我想创建一个变量,用来观察过程执行时发生的情况,这样我就在另一个表中有了一个执行日志.
由于每天都会执行该过程以创建.txt,但不是每天都有where子句中的可用数据,因此我希望保留一个日志,以便BU不会认为这是一个错误

xpcnnkqh

xpcnnkqh1#

如何在后续IF语句中调用CTE
不能使用临时表,特别是当您需要可重用性或试图提高可读性时:

CREATE PROC st_exemple
AS
(...)

DROP TABLE IF EXISTS #Results;
SELECT 
    TABEL1.ID_COTA,
    TABLE2.NM_CLIENT
INTO #Results   
FROM (...)
WHERE(...);

IF EXISTS (SELECT * FROM #Results)
  BEGIN
    SET @COMMENT = 'SELECT WTIHOUT DATA'
    GOTO END_PROC
  END;
ELSE
  BEGIN
      SET @COMMENT = 'SELECT WITH DATA';
      GOTO END_PROC
  END;

相关问题