如何在 Snowflake 中编写等效的 IF ELSE 即席 SQL 查询

use*_*490 7 if-statement return snowflake-cloud-data-platform

我正在尝试创建一个与以下基于 T-SQL 的即席查询等效的 Snowflake。

**T-SQL version**
Declare @i int = 0;

If(@i = 0)
   PRINT '0';
Else
 Begin
   PRINT '1'
   RETURN;
   PRINT '2'
 End


**Snowflake version**
Set i = 0;

If($i = 0)
   Select '0';
Else
 Begin
   Select '1'
   RETURN;
   Select '2'
 End

Run Code Online (Sandbox Code Playgroud)

当我从 Snowflake Web UI 运行 Snowflake 查询时,出现错误:

SQL 编译错误:语法错误第 1 行位于位置 0 意外的“IF”

我搜索了雪花文档,但没有找到以下有用的文档:

  1. 如果别的
  2. 开始 结束
  3. 返回

任何帮助,将不胜感激。

谢谢。

小智 5

Snowflake 不支持条件 T-SQL 语句。它确实支持查询中的条件表达式。

对于条件语句执行,如果条件表达式的使用不足以满足您的需求,请考虑使用带有嵌入式 JavaScript 的Snowflake存储过程。

一个非常简单的存储过程示例,说明了调用时的条件查询执行:

CREATE OR REPLACE PROCEDURE stored_proc_example(TEST_VALUE INTEGER)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
    // Declaring SQL statement(s) to execute later
    var command_1 = "SELECT 1";
    var command_2 = "SELECT 2";

    if (TEST_VALUE === 0) {

        var stmt = snowflake.createStatement({ sqlText: command_1 });
        var rs = stmt.execute();
        // Omitted: Perform logic with 'rs' rows to prepare a return value
        return '1';

    } else {

        var stmt = snowflake.createStatement({ sqlText: command_2 });
        var rs = stmt.execute();
        // Omitted: Perform logic with 'rs' rows to prepare a return value
        return '2';

    }
$$
;
Run Code Online (Sandbox Code Playgroud)

运行为:

SET i=0;
CALL stored_proc_example($i);

SET i=1;
CALL stored_proc_example($i);
Run Code Online (Sandbox Code Playgroud)