【问题标题】:Using Logic in TSQL在 SQL 中使用逻辑
【发布时间】:2023-04-09 15:16:02
【问题描述】:

我想在 TSQL (SQL Server 2005) 中做这样的事情:

IF (Column1 = x)
{
     --CTE statement
}
ELSE
{
    --SQL statement
}

感谢任何帮助。

【问题讨论】:

    标签: sql-server sql-server-2005 tsql


    【解决方案1】:

    那是查询的一部分吗?还是自己?

    SELECT之外,你有:

    IF ([test])
    BEGIN
         [true branch]
    END
    ELSE
    BEGIN
        [false branch]
    END
    

    分支可以做任何事情,包括使用 CTE 等。

    在查询中,您有 CASE:

    SELECT ..., CASE WHEN Column1=x THEN [answer1]
                     ELSE [answer2] END, ...
    

    但是,您不能在 CASE 内进行 CTE

    【讨论】:

    • 我将它包装在一个 SP 中。我不知道这是否可行。
    • 或者我应该在 CTE 内部做逻辑?如何解决这个问题?
    【解决方案2】:

    CTE 适用于整个语句并且不是独立的。它是更大 SQL 构造中的子句或子构造。

    如果每个语句的输出不同,则此方法有效

    IF EXISTS (SELECT * FROM table WHERE Column1 = x)
    BEGIN
        ;WITH cStuff AS
        (
            ...
        )
        SELECT 
            ...
        FROM
            tables and cStuff
    END
    ELSE
    BEGIN
        SELECT 
            ...
        FROM
            tables
    END
    

    如果输出相同,则此方法有效:

    ;WITH cStuff AS
    (
        ...
    )
    SELECT 
        ...
    FROM
        tables and cStuff
    WHERE
        column1 = x
    UNION ALL
    SELECT 
        ...
    FROM
        tables
    WHERE
        column1 <> x
    

    否则,我不确定你想要达到什么目的......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多