SnowConvert AI - Function References for SQL-Server

ISNUMERIC_UDF

定义

此用户定义的函数 (UDF) 用于判断一个表达式是否为有效的数字类型。

ISNUMERIC_UDF(EXPR VARCHAR)

参数

EXPR VARCHAR

要计算的表达式。

返回

当输入表达式的计算结果为有效的数字数据类型时,返回 1;否则返回 0。

使用示例

输入:

SELECT ISNUMERIC_UDF('5');

输出:

1

PATINDEX_UDF

定义

此用户定义的函数 (UDF) 返回指定表达式中首次出现某个模式的起始位置;如果未找到该模式,则返回零。

PATINDEX_UDF(PATTERN VARCHAR, EXPRESSION VARCHAR)

参数

PATTERN VARCHAR

要搜索的模式。

EXPRESSION VARCHAR

正在计算的表达式。

返回

返回一个整数,表示模式的起始位置。

使用示例

输入:

SELECT PATINDEX_UDF('an', 'banana');

输出:

2

ERROR_SEVERITY_UDF

定义

此用户定义的函数 (UDF) 用于获取一个表示错误严重程度的值。默认值始终为 16。

ERROR_SEVERITY_UDF()

参数

无输入参数。

返回

返回一个 string,其中包含与 SQL 变量名 ERROR_SEVERITY 关联的值。

使用示例

输入:

SELECT ERROR_SEVERITY_UDF();

输出:

null -- No information set.

TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(STRING, STRING, ARRAY, ARRAY)

定义

此用户定义的函数 (UDF) 通过直接替换 SQL 字符串中的参数值,来模拟 SP_EXECUTESQL 系统过程中嵌入式参数(数据绑定)的行为。

此外,它还会从字符串中移除 OUTPUT 参数,因为这是在 SP_EXECUTESQL 将被转换到的 EXECUTE IMMEDIATE 之外完成的。

有关更多信息,请参阅 SP_EXECUTESQL 转换规范。

TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(
    _SQL_STRING STRING,
    _PARAMS_DEFINITION STRING,
    _PARAMS_NAMES ARRAY,
    _PARAMS_VALUES ARRAY
)

参数

_SQL_STRING STRING

要转换的字符串。

_PARAMS_DEFINITION STRING

原始参数定义,用于检查参数值必须采用的赋值顺序。

_PARAMS_NAMES ARRAY

一个包含参数名称的数组,用于替换 SQL 字符串中的值。

_PARAMS_VALUES ARRAY

一个包含参数值的数组,用于替换 SQL 字符串中的值。

返回

返回一个 STRING,其中嵌入的参数值已替换。

使用示例

输入:

SELECT TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(
    'SELECT * FROM PERSONS WHERE NAME LIKE (@NAME) AND ID < @id AND AGE < @age;', '@age INT, @id INT, @name VARCHAR(25)',
    ARRAY_CONSTRUCT('', '', ''),
    ARRAY_CONSTRUCT(30, 100, 'John Smith'));

输出:

SELECT * FROM PERSONS WHERE NAME LIKE ('John Smith') AND ID < 100 AND AGE < 30;

TABLE_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的表。

TABLE_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的表名。

返回

根据表的存在情况返回布尔表达式。

使用示例

输入:

SELECT TABLE_OBJECT_ID_UDF('Test');

输出:

FALSE

ERROR_PROCEDURE_UDF

定义

此用户定义的函数 (UDF) 返回与 SQL 变量名称 ERROR_PROCEDURE 相关的值。

ERROR_PROCEDURE_UDF()

参数

无输入参数。

返回

返回一个 string,其中包含与 SQL 变量名 ERROR_PROCEDURE 关联的值。

使用示例

输入:

SELECT ERROR_PROCEDURE_UDF();

输出:

null -- No information set.

DB_ID_UDF(STRING)

定义

此用户定义的函数 (UDF) 会模拟 DB_ID (https://learn.microsoft.com/en-us/sql/t-sql/functions/db-id-transact-sql?view=sql-server-ver16) 功能。

DB_ID_UDF(p_database_name STRING)

参数

p_database_name STRING

要获取 ID 的数据库的名称。

返回

Returns an id which corresponds to the number assigned to the database when it is created. This number is assigned consecutively.

使用示例

输入:

SELECT DB_ID_UDF('MY_DATABASE')

输出:

6

警告

如果数据库不存在,则返回 null。

ERROR_LINE_UDF

定义

此用户定义的函数 (UDF) 返回与 SQL 变量名称 ERROR_LINE 相关的值。

ERROR_LINE_UDF()

参数

无输入参数。

返回

返回一个 string,其中包含与 SQL 变量名 ERROR_LINE 关联的值。

使用示例

输入:

SELECT ERROR_LINE_UDF();

输出:

null -- No information set.

FUNCTION_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的函数。

VIEW_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的函数名。

返回

根据函数的存在情况返回布尔表达式。

使用示例

输入:

SELECT FUNCTION_OBJECT_ID_UDF('Test');

输出:

FALSE

CONSTRAINT_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的约束条件。

CONSTRAINT_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的约束条件的名称。

返回

根据约束条件的存在情况返回布尔表达式。

使用示例

输入:

SELECT CONSTRAINT_OBJECT_ID_UDF('Test');

输出:

FALSE

FOR_XML_UDF (OBJECT, VARCHAR, VARCHAR)

定义

此用户定义的函数 (UDF) 将对象转换为 XML。

FOR_XML_UDF(OBJ OBJECT, ELEMENT_NAME VARCHAR, ROOT_NAME VARCHAR)

参数

OBJ OBJECT

要转换的对象。

ELEMENT_NAME VARCHAR

要赋予对象的元素名称。

ROOT_NAME VARCHAR

XML 的根名称。

返回

返回 XML 格式的 varchar。

使用示例

输入:

SELECT
FOR_XML_UDF(OBJECT_CONSTRUCT('id', 1, 'name', 'David'), 'employee', 'employees');

输出:

<employees>
    <employee type="OBJECT">
        <id type="INTEGER">1</id>
        <name type="VARCHAR">David</name>
    </employee>
<employees>

OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的对象。

OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的对象名称。

返回

根据对象的存在情况返回布尔表达式。

使用示例

输入:

SELECT OBJECT_ID_UDF('Test');

输出:

FALSE

PROCEDURE_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的过程。

PROCEDURE_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的过程名称。

返回

根据过程的存在情况返回布尔表达式。

使用示例

输入:

SELECT PROCEDURE_OBJECT_ID_UDF('Test');

输出:

FALSE

ISDATE_UDF

定义

此用户定义的函数 (UDF) 用于判断输入值是否为有效的日期。

ISDATE_UDF(DATE_VALUE STRING)

参数

DATE_VALUE STRING

要评估的日期。

返回

当输入表达式的计算结果为有效的日期数据类型时,返回 1;否则返回 0。

使用示例

输入:

SELECT ISDATE_UDF('2024-01-26');

输出:

1

ERROR_NUMBER_UDF

定义

此用户定义的函数 (UDF) 返回与 SQL 变量名称 ERROR_NUMBER 相关的值。

ERROR_NUMBER_UDF()

参数

无输入参数。

返回

返回一个 string,其中包含与 SQL 变量名 ERROR_NUMBER 关联的值。

使用示例

输入:

SELECT ERROR_NUMBER_UDF();

输出:

null -- No information set.

OFFSET_FORMATTER (VARCHAR)

定义

此用户定义的函数 (UDF) 是一个 辅助函数,用于格式化偏移小时及其前缀运算符。

OFFSET_FORMATTER(offset_hrs VARCHAR)

参数

offset_hrs VARCHAR

要格式化的值。

返回

返回一个 varchar 值,其中包含格式化后的偏移量输出。

使用示例

输入:

 SELECT OFFSET_FORMATTER('2024-01-26 22:00:50.708 -0800');

输出:

2024-01-26 22:00:50.708 -0800

OPENXML_UDF

定义

此用户定义的函数 (UDF) 从 XML 读取中生成查询。

OPENXML_UDF(XML VARCHAR, PATH VARCHAR)

参数

XML VARCHAR

varchar 形式的 XML 内容。

PATH VARCHAR

要提取的节点的路径。

返回

返回一个表,其中包含 XML 读取生成的数据。

使用示例

输入:

SELECT * FROM TABLE(OPENXML_UDF('<iceCreamOrders>
    <order>
        <customer customerID="CUST001" contactName="Test ABC">
            <iceCreamOrder orderID="ORD001" employeeID="101" orderDate="2023-05-15T14:30:00">
                <iceCreamDetail productID="001" quantity="2"/>
                <iceCreamDetail productID="003" quantity="1"/>
            </iceCreamOrder>
        </customer>
    </order>
    <order>
        <customer customerID="CUST002" contactName="Test XYZ">
            <iceCreamOrder orderID="ORD002" employeeID="102" orderDate="2023-06-20T12:45:00">
                <iceCreamDetail productID="005" quantity="3"/>
                <iceCreamDetail productID="007" quantity="2"/>
            </iceCreamOrder>
        </customer>
    </order>
</iceCreamOrders>
', 'iceCreamOrders:order'));

输出:

Value
1{ "order": { "$name": "order", "customer": [ { "customer": { "$name": "customer", "@contactName": "Test ABC", "@customerID": "CUST001", "iceCreamOrder": [ { "iceCreamOrder": { "$name": "iceCreamOrder", "@employeeID": 101, "@orderDate": "2023-05-15T14:30:00", "@orderID": "ORD001", "iceCreamDetail": [ { "iceCreamDetail": { "$name": "iceCreamDetail", "@productID": "001", "@quantity": 2 } }, { "iceCreamDetail": { "$name": "iceCreamDetail", "@productID": "003", "@quantity": 1 } } ] } } ] } } ] } }
2{ "order": { "$name": "order", "customer": [ { "customer": { "$name": "customer", "@contactName": "Test XYZ", "@customerID": "CUST002", "iceCreamOrder": [ { "iceCreamOrder": { "$name": "iceCreamOrder", "@employeeID": 102, "@orderDate": "2023-06-20T12:45:00", "@orderID": "ORD002", "iceCreamDetail": [ { "iceCreamDetail": { "$name": "iceCreamDetail", "@productID": "005", "@quantity": 3 } }, { "iceCreamDetail": { "$name": "iceCreamDetail", "@productID": "007", "@quantity": 2 } } ] } } ] } } ] } }

QUOTENAME_UDF (VARCHAR, VARCHAR)

定义

此用户定义的函数 (UDF) 通过返回一个添加了分隔符的 Unicode 字符串,来创建有效的 SQL Server 分隔标识符。

QUOTENAME_UDF(STR VARCHAR, QUOTECHAR VARCHAR)

参数

STR VARCHAR

要转换的字符串。

QUOTECHAR VARCHAR

要添加到第一个参数的分隔符。

返回

返回一个 varchar,其中包含作为分隔符添加的第二个参数标识符。

使用示例

输入:

SELECT QUOTENAME_UDF('test', '?');

输出:

?test?

UPDATE_ERROR_VARS_UDF (STRING, STRING, STRING)

定义

此用户定义的函数 (UDF) 更新环境中的错误变量,以了解该过程在何时引发错误。

UPDATE_ERROR_VARS_UDF(MESSAGE STRING, SEVERITY STRING, STATE STRING)

参数

STATE STRING

错误消息的状态。

MESSAGE STRING

将在错误中显示的消息。

SEVERITY STRING

错误的严重性。

返回

返回一个 string 值,其中包含新错误消息的信息。

使用示例

输入:

  SELECT UPDATE_ERROR_VARS_UDF('Message', '1', '1');

输出:

1ABC1

ROUND_MILLISECONDS_UDF (TIMESTAMP_TZ)

定义

此用户定义的函数 (UDF) 是一个将毫秒舍入到 0、3 或 7 毫秒增量的函数。Transact 会自动对日期时间值的毫秒数进行舍入。

ROUND_MILLISECONDS_UDF(INPUT TIMESTAMP_TZ)

参数

INPUT TIMESTAMP_TZ

要进行舍入处理的输入时间。

返回

返回与输入相同的 TIMESTAMP_TZ 值,但毫秒已经过舍入处理。

使用示例

输入:

SELECT PUBLIC.ROUND_MILLISECONDS_UDF('1900-01-01 00:00:00.995 +0100')

输出:

'1900-01-01 00:00:00.997 +0100'

CAST_NUMERIC_TO_TIMESTAMP_TZ_UDF (NUMBER)

定义

此用户定义的函数 (UDF) 用于将数值的类型转换为 timestamp_tz

CAST_NUMERIC_TO_TIMESTAMP_TZ_UDF(INPUT NUMBER)

参数

INPUT NUMBER

要进行类型转换的数字。

返回

返回带有当前时区的 timestamp_tz

使用示例

输入:

SELECT PUBLIC.CAST_NUMERIC_TO_TIMESTAMP_TZ_UDF(0)

输出:

1900-01-01 01:00:00.000 +0100

IDENTITY_UDF

定义

此用户定义的函数 (UDF) 用于判断一个表达式是否为有效的数字类型。

IDENTITY_UDF()

参数

无输入参数。

返回

返回一个整数表达式。

使用示例

警告

为支持该逻辑,会生成一个序列。

输入:

IDENTITY_UDF()

输出:

1

FOR_XML_UDF (OBJECT, VARCHAR)

定义

此用户定义的函数 (UDF) 将对象转换为 XML。

FOR_XML_UDF(OBJ OBJECT, ELEMENT_NAME VARCHAR)

参数

OBJ OBJECT

要转换的对象。

ELEMENT_NAME VARCHAR

要赋予对象的元素名称。

返回

返回 XML 格式的 varchar。

使用示例

输入:

SELECT
FOR_XML_UDF(OBJECT_CONSTRUCT('id', 1, 'name', 'David'), 'employee');

输出:

<employee type="OBJECT">
    <id type="INTEGER">1</id>
    <name type="VARCHAR">David</name>
</employee>

QUOTENAME_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 通过返回一个添加了分隔符的 Unicode 字符串,来创建有效的 SQL Server 分隔标识符。

QUOTENAME_UDF(STR VARCHAR)

参数

STR VARCHAR

要转换的字符串。

返回

返回一个添加了分隔标识符的 varchar。

使用示例

输入:

SELECT QUOTENAME_UDF('test');

输出:

"test"

VIEW_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的视图。

VIEW_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的视图名称。

返回

根据视图的存在情况返回布尔表达式。

使用示例

输入:

SELECT VIEW_OBJECT_ID_UDF('Test');

输出:

FALSE

SUBTRACT_TIMESTAMP_TZ_UDF (TIMESTAMP_TZ, TIMESTAMP_TZ)

定义

此用户定义的函数 (UDF) 将两个输入转换为系统会话时区,并以 1900-01-01 00:00:00.000 作为零值减去日期 (FIRST_DATE - SECOND_DATE)。如果某个值不包括时区,则使用当前会话时区。

PUBLIC.SUBTRACT_TIMESTAMP_TZ_UDF(FIRST_DATE TIMESTAMP_TZ, SECOND_DATE TIMESTAMP_TZ)

参数

FIRST_DATE TIMESTAMP_TZ

要从中减去的第一个日期。

SECOND_DATE TIMESTAMP_TZ

要减去的第二个日期。

返回

返回两个输入日期之间的差值。

使用示例

输入:

SELECT SUBTRACT_TIMESTAMP_TZ_UDF('1900-01-01 00:00:00.000 +0100', '1900-01-01 00:00:00.003 -0100')

输出:

1899-12-31 13:59:59.997 -0800

STR_UDF (FLOAT, VARCHAR)

定义

此用户定义的函数 (UDF) 是一个模板,用于将 SQL Server STR() 的功能转换到 Snowflake,适用于使用一个或两个可选参数的情况

STR_UDF(FLOAT_EXPR FLOAT, FORMAT VARCHAR)

参数

FLOAT_EXPR FLOAT

要处理的表达式。

FORMAT VARCHAR

要应用的格式。

返回

返回一个 varchar,其中包含格式化后的表达式。

使用示例

输入:

SELECT STR_UDF(1.5, '99');

输出:

2

XML_JSON_SIMPLE

定义

此用户定义的函数 (UDF) 通过执行对 XML 值的读取,生成一个包含信息的对象。

XML_JSON_SIMPLE(XML VARIANT)

参数

XML VARIANT

要读取的 XML。

返回

返回一个对象,其中包含来自 XML 的处理后的信息。

使用示例

输入:

SELECT XML_JSON_SIMPLE(TO_VARIANT(PARSE_XML('<iceCreamOrders>
    <order>
        <customer customerID="CUST001" contactName="Test ABC">
            <iceCreamOrder orderID="ORD001" employeeID="101" orderDate="2023-05-15T14:30:00">
                <iceCreamDetail productID="001" quantity="2"/>
                <iceCreamDetail productID="003" quantity="1"/>
            </iceCreamOrder>
        </customer>
    </order>
    <order>
        <customer customerID="CUST002" contactName="Test XYZ">
            <iceCreamOrder orderID="ORD002" employeeID="102" orderDate="2023-06-20T12:45:00">
                <iceCreamDetail productID="005" quantity="3"/>
                <iceCreamDetail productID="007" quantity="2"/>
            </iceCreamOrder>
        </customer>
    </order>
</iceCreamOrders>
')));

输出:

{
  "iceCreamOrders": {
    "$name": "iceCreamOrders",
    "order": [
      {
        "order": {
          "$name": "order",
          "customer": [
            {
              "customer": {
                "$name": "customer",
                "@contactName": "Test ABC",
                "@customerID": "CUST001",
                "iceCreamOrder": [
                  {
                    "iceCreamOrder": {
                      "$name": "iceCreamOrder",
                      "@employeeID": 101,
                      "@orderDate": "2023-05-15T14:30:00",
                      "@orderID": "ORD001",
                      "iceCreamDetail": [
                        {
                          "iceCreamDetail": {
                            "$name": "iceCreamDetail",
                            "@productID": "001",
                            "@quantity": 2
                          }
                        },
                        {
                          "iceCreamDetail": {
                            "$name": "iceCreamDetail",
                            "@productID": "003",
                            "@quantity": 1
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      {
        "order": {
          "$name": "order",
          "customer": [
            {
              "customer": {
                "$name": "customer",
                "@contactName": "Test XYZ",
                "@customerID": "CUST002",
                "iceCreamOrder": [
                  {
                    "iceCreamOrder": {
                      "$name": "iceCreamOrder",
                      "@employeeID": 102,
                      "@orderDate": "2023-06-20T12:45:00",
                      "@orderID": "ORD002",
                      "iceCreamDetail": [
                        {
                          "iceCreamDetail": {
                            "$name": "iceCreamDetail",
                            "@productID": "005",
                            "@quantity": 3
                          }
                        },
                        {
                          "iceCreamDetail": {
                            "$name": "iceCreamDetail",
                            "@productID": "007",
                            "@quantity": 2
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    ]
  }
}

FORMATMESSAGE_UDF

定义

此用户定义的函数 (UDF) 提供了 SQL Server FORMATMESSAGE 函数的功能。它根据所提供字符串中的现有消息构造一条消息。

FORMATMESSAGE_UDF(MESSAGE STRING, ARGS ARRAY)

参数

MESSAGE STRING

现有的消息字符串。

ARGS ARRAY

要添加到第一个消息字符串中的实参。

返回

返回一个字符串,其中包含与实参位置相关的对应串联消息。

使用示例

输入:

SELECT FORMATMESSAGE_UDF('Test %s!', TO_ARRAY('a'));

输出:

Test a!

IS_MEMBER_UDF

定义

此用户定义的函数 (UDF) 通过检查访问令牌来确定 Windows 组成员资格。

IS_MEMBER_UDF(ROLE STRING)

参数

ROLE STRING

要检查的角色名称。

返回

在当前用户是角色成员时,返回布尔表达式值 true;否则返回 false。

使用示例

输入:

SELECT IS_MEMBER_UDF('TEST');

输出:

FALSE

RAISERROR_UDF(DOUBLE、DOUBLE、DOUBLE、ARRAY)

定义

此用户定义的函数 (UDF) 会引发带有特定消息的异常。

RAISERROR_UDF(MSG_ID DOUBLE, SEVERITY DOUBLE, STATE DOUBLE, PARAMS ARRAY)

参数

MSG_ID DOUBLE

错误消息的消息 ID。

SEVERITY DOUBLE

错误的严重性数字。

STATE DOUBLE

错误消息的状态编号。

PARAMS ARRAY

错误消息的附加信息。

返回

返回一个 varchar,其中包含错误消息。

使用示例

输入:

SELECT RAISERROR_UDF(2.1, 1.6, 1.0, array_construct('More information'));

输出:

MESSAGE: 2.1, LEVEL: 1.6, STATE: 1

STR_UDF(FLOAT)

定义

此用户定义的函数 (UDF) 是一个模板,用于将 SQL Server STR() 的功能转换到 Snowflake,适用于使用一个或两个可选参数的情况

STR_UDF(FLOAT_EXPR FLOAT, FORMAT VARCHAR)

参数

FLOAT_EXPR FLOAT

要处理的表达式。

返回

返回一个 varchar,其中包含格式化后的表达式。

使用示例

输入:

SELECT STR_UDF(1.5);

输出:

2

SWITCHOFFSET_UDF (TIMESTAMP_TZ, VARCHAR)

定义

此用户定义的函数 (UDF) 会返回一个新的 timestamp_tz,其中时间已根据 target_tz 参数进行了调整。

SWITCHOFFSET_UDF(source_timestamp TIMESTAMP_TZ, target_tz varchar)

参数

source_timestamp TIMESTAMP_TZ

要调整的源时间戳。

target_tz varchar

要获取的目标时间。

返回

以 TIMESTAMP_TZ 形式返回经过格式化的目标时间。

使用示例

输入:

SELECT SWITCHOFFSET_UDF(time_in_paris, '-0600') as time_in_costa_rica;

输出:

time_in_paris

time_in_costa_rica

2022-10-05 22:00:24.467 +02:00

2022-10-05 14:00:24.467 -06:00

GET_CURRENT_TIMEZONE_UDF

定义

此用户定义的函数 (UDF) 以字面量形式获取当前会话或系统时区。

GET_CURRENT_TIMEZONE_UDF()

参数

无参数。

返回

返回一个字面量值,其中包含当前会话或系统的时区。

使用示例

输入:

SELECT PUBLIC.GET_CURRENT_TIMEZONE_UDF();

输出:

'Europe/London'

UPDATE_ERROR_VARS_UDF (STRING, STRING, STRING, STRING, STRING, STRING)

定义

此用户定义的函数 (UDF) 更新环境中的错误变量,以了解该过程在何时引发错误。

UPDATE_ERROR_VARS_UDF(LINE STRING,CODE STRING, STATE STRING, MESSAGE STRING, PROC_NAME STRING, SEVERITY STRING)

参数

LINE STRING

与错误相关的行。

CODE STRING

与错误消息相关的错误代码。

STATE STRING

错误消息的状态。

MESSAGE STRING

将在错误中显示的消息。

PROC_NAME STRING

过程名称。

SEVERITY STRING

错误的严重性。

返回

返回一个 string 值,其中包含新错误消息的信息。

使用示例

输入:

  SELECT UPDATE_ERROR_VARS_UDF('1', '1', '1', 'ABC', 'TEST', '1');

输出:

111ABCTEST1

SEQUENCE_OBJECT_ID_UDF (VARCHAR)

定义

此用户定义的函数 (UDF) 用于检查之前是否创建过具有特定名称的序列。

SEQUENCE_OBJECT_ID_UDF(NAME VARCHAR)

参数

NAME VARCHAR

要评估的序列名称。

返回

根据序列的存在情况返回布尔表达式。

使用示例

输入:

SELECT SEQUENCE_OBJECT_ID_UDF('Test');

输出:

FALSE

CAST_TIMESTAMP_TZ_TO_NUMERIC_UDF (TIMESTAMP_TZ)

定义

此用户定义的函数 (UDF) 用于将 timestamp_tz 转换为数值。它会将当前时区转换为 UTC,因为该数值无法保存 timestamp 信息。

CAST_TIMESTAMP_TZ_TO_NUMERIC_UDF(INPUT TIMESTAMP_TZ)

参数

INPUT TIMESTAMP_TZ

将要进行类型转换的 timestamp 输入。

返回

返回带有小数位的数字。整数部分表示从 1900-01-01 起的天数,小数部分表示 24 小时内的毫秒百分比。

使用示例

输入:

SELECT PUBLIC.CAST_TIMESTAMP_TZ_TO_NUMERIC_UDF('1900-01-01 01:00:00.000 +0100')

输出:

0

RAISERROR_UDF (VARCHAR, DOUBLE, DOUBLE, ARRAY)

定义

此用户定义的函数 (UDF) 会引发带有特定消息的异常。

RAISERROR_UDF(MSG_TEXT VARCHAR, SEVERITY DOUBLE, STATE DOUBLE, PARAMS ARRAY)

参数

MSG_TEXT VARCHAR

错误消息的消息文本。

SEVERITY DOUBLE

错误的严重性数字。

STATE DOUBLE

错误消息的状态编号。

PARAMS ARRAY

错误消息的附加信息。

返回

返回一个 varchar,其中包含错误消息。

使用示例

输入:

SELECT RAISERROR_UDF('<\<%*.*s>> TEST', 1.0, 1, array_construct());

输出:

MESSAGE: <<undefined>> TEST, LEVEL: 1, STATE: 1

PARSENAME_UDF

定义

此用户定义的函数 (UDF) 用于获取以 '.' 分隔的 string 的 PART_NUMBER 索引。

PARSENAME_UDF(STR VARCHAR, PART_NUMBER INT)

参数

STR VARCHAR

对象名称作为 string

PART_NUMBER INT

要检查的对象名称部分。

返回

返回对象名称的指定部分。

使用示例

输入:

SELECT PARSENAME_UDF('Test_A.Test_B.Test_C]', 2);

输出:

Test_B

ERROR_STATE_UDF

定义

此用户定义的函数 (UDF) 用于获取错误状态,无论它在 CATCH 块的范围内运行多少次或在何处运行。

ERROR_STATE_UDF()

参数

无输入参数。

返回

返回一个 string,其中包含错误状态,无论它在 CATCH 块的范围内运行多少次或在何处运行。

使用示例

输入:

SELECT ERROR_STATE_UDF();

输出:

null -- No information set.

CAST_TIME_TO_TIMESTAMP_TZ_UDF (TIME)

定义

此用户定义函数 (UDF) 将 time 转换为 timestamp_tz

CAST_TIME_TO_TIMESTAMP_TZ_UDF(INPUT TIME)

参数

INPUT TIME

要转换为 timestamp_tz 类型的输入时间。

返回

返回一个 timestamp_tz,其日期为 1900-01-01,时间与输入时间相同。

使用示例

输入:

SELECT PUBLIC.CAST_TIME_TO_TIMESTAMP_TZ_UDF('00:00:00.995')

输出:

1900-01-01 00:00:00.997

SUM_TIMESTAMP_TZ_UDF (TIMESTAMP_TZ, TIMESTAMP_TZ)

定义

此用户定义的函数 (UDF) 将两个输入转换为系统或会话时区,并以 1900-01-01 00:00:00.000 作为零值来对日期进行求和。如果任何值不包括时区,则使用当前会话时区。

SUM_TIMESTAMP_TZ_UDF(FIRST_DATE TIMESTAMP_TZ, SECOND_DATE TIMESTAMP_TZ)

参数

FIRST_DATE TIMESTAMP_TZ

第一个要相加的日期。

SECOND_DATE TIMESTAMP_TZ

第二个要相加的日期。

返回

返回两个输入日期之和。

使用示例

输入:

SELECT SUM_TIMESTAMP_TZ_UDF('1900-01-01 00:00:00.000 +0100', '1900-01-01 00:00:00.003 -0100')

输出:

1900-01-01 00:00:00.003 +0000

GET_WEEK_START_UDF

定义

This user-defined function (UDF) retrieves the WEEK_START configuration, which is equivalent to the @@FIRSTDATE function. To maintain consistency across platforms, ensure the WEEK_START parameter matches the DATEFIRST setting in Transact-SQL.

GET_WEEK_START_UDF()

返回

Returns a number representing the first day of the week.

使用示例

Snowflake's default value for WEEK_START is 0. However, this function returns 7 to align with the default DATEFIRST value in Transact-SQL, ensuring consistent behavior.

输入:

SELECT GET_WEEK_START_UDF();

输出:

7

DATE_PART_WEEK_DAY_UDF

定义

This user-defined function (UDF) gets the day of the week as a number (1-7) To ensure the consistency across platforms, please set the WEEK_START parameter to the same value as the DATEFIRST setting in Transact-SQL.

DATE_PART_WEEK_DAY_UDF(INPUT DATE)

参数

INPUT DATE

Date to get the day.

返回

Returns a number representing the day of the week where Monday=1, Tuesday=2, ..., Sunday=7.

使用示例

The WEEK_START parameter is 0, which causes the DATE_PART_WEEK_DAY_UDF to return a value of 1.

输入:

SELECT PUBLIC.DATE_PART_WEEK_DAY_UDF('2025-08-17') AS "Sunday";

输出:

1

SCOPE_IDENTITY()

定义

The SCOPE_IDENTITY() function in SQL Server returns the last identity value inserted into an identity column in the same scope. SnowConvert AI transforms this function into a time-travel query using AT(STATEMENT =>) to retrieve the identity value from the most recent INSERT statement.

Transformation Pattern

SQL Server:

INSERT INTO TableName (Column1) VALUES (Value1);
SET @VariableName = SCOPE_IDENTITY();

Snowflake:

INSERT INTO TableName (Column1) VALUES (Value1);
LET _scope_identity_query_id VARCHAR := LAST_QUERY_ID();
VariableName := (SELECT MAX(IdentityColumn) FROM TableName AT(STATEMENT => _scope_identity_query_id));

Requirements

  • Only works within procedural contexts (stored procedures, functions) that are transformed to SnowScript

  • Requires an identity column defined on the target table using IDENTITY(seed, increment)

  • The preceding INSERT statement must target a table with a resolvable identity column in the symbol table

Usage Example

Input (SQL Server):

CREATE TABLE Orders (OrderID INT IDENTITY(1,1), CustomerID INT);
GO

CREATE PROCEDURE InsertOrder @CustomerID INT
AS
BEGIN
    DECLARE @OrderID INT;
    INSERT INTO Orders (CustomerID) VALUES (@CustomerID);
    SET @OrderID = SCOPE_IDENTITY();
    SELECT @OrderID;
END;

Output (Snowflake):

CREATE OR REPLACE TABLE Orders (
  OrderID INT IDENTITY(1, 1) ORDER,
  CustomerID INT
)
;

CREATE OR REPLACE PROCEDURE InsertOrder (CUSTOMERID INT)
RETURNS TABLE()
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
  DECLARE
    ORDERID INT;
    ProcedureResultSet RESULTSET;
  BEGIN

    INSERT INTO Orders (CustomerID) VALUES (:CUSTOMERID);
    LET _scope_identity_query_id VARCHAR := LAST_QUERY_ID();
    ORDERID :=
      SELECT
        MAX(OrderID)
      FROM
        Orders AT (STATEMENT => _scope_identity_query_id);
    ProcedureResultSet := (SELECT
      :ORDERID);
    RETURN TABLE(ProcedureResultSet);
  END;
$$;

Known Limitations

Nested Scope Edge Case

When SCOPE_IDENTITY() is used inside a nested BEGIN...END block while the INSERT statement is in the outer procedure body, the transformation may not detect the INSERT correctly:

CREATE PROCEDURE Example
AS
BEGIN
    INSERT INTO Orders (CustomerID) VALUES (@CustomerID);  -- outer scope
    BEGIN
        DECLARE @OrderID INT;
        SET @OrderID = SCOPE_IDENTITY();  -- inner scope
    END;
END;

In this case, SnowConvert AI may generate SSC-EWI-TS0095 indicating that no preceding INSERT was found, even though one exists at a different nesting level. This is a known limitation tracked for future enhancement.

Workaround: Refactor the code to keep SCOPE_IDENTITY() in the same block as the INSERT statement.

Batch Context

SCOPE_IDENTITY() is not transformed in batch contexts (scripts outside of procedures/functions). In such cases, the original function call is preserved with SSC-EWI-0073.

Additional Notes

  • The AT(STATEMENT =>) time-travel clause may return incorrect results under high-concurrency scenarios where multiple sessions insert into the same table simultaneously

  • For more information about time-travel queries, see the Snowflake documentation