MULTI-STATEMENT TABLE-VALUED
Translation reference to convert SQL Server UDF (User Defined Functions) with TABLE return type to Snowflake.
Description
Multi-statement table-valued is similar to Inline-statement table-valued (INLINE TABLE-VALUED). However Multi-statement table-valued may have more than one statement in its function body, the table columns are specified in the return type and it has a BEGIN/END block (SQL Server Language Reference Creating a multi-statement table-valued function
SQL Server Syntax
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] [READONLY] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]Snowflake SQL
Sample Source Patterns
The following section describes all the possible source code patterns that can appear in this kind of CREATE FUNCTION syntax.
The function body of Multi-Statement Table-Valued function must be a SELECT statement. For this reason the others statements must be called separately.
Insert values in a table
Inserts one or more rows into the table and returns the table with the new values
SQL Server
Snowflake SQL
Insert value according to if/else statement
Inserts a row into the table according to the condition and returns the table with the new value
SQL Server
Snowflake SQL
Inserts multiple according to if/else statement
The example below inserts more than one value into the table and more than one variable is modified according to the condition. Returns the table with the new values
SQL Server
Snowflake
In case there are nested if statements and more than one variables are modified in the statements it is necessary to use a stored procedure.
Update values previously inserted
Updates columns values of the table into the function body and returns it with the new values.
SQL Server
Snowflake SQL
Multiple return clauses
In the following sample there is more than one return clause, this is because depending on the situation it is not necessary to keep executing the whole function.
SQL Server
Snowflake SQL
This transformation is applied when there is only one value to insert, if there is more than one value it is necessary to use a stored procedure.
Complex cases
The example is a complex case that uses nested if statements and inserts a value depending on the true condition.
SQL Server
Snowflake SQL
Known Issues
While statements along side queries
The problem with this example is that there's no way of transforming the while statement to a CTE inside the WITH clause of the main select, this forces us to transform this statement to store procedure to maintain the same logic.
SQL Server
Snowflake SQL
Declare Cursor
User-defined functions cannot DECLARE, OPEN, FETCH, CLOSE or DEALLOCATE a CURSOR. Use a Stored Procedure to work with cursors.
SQL Server
Snowflake SQL
Different statements are not supported in Common Tables Expressions
The clauses UPDATE, INSERT, DELETE, ALTER or DROP are not supported on the body of common tables expressions, even after their declaration using a delimitator. For this reason, the function can be modified to work as a stored procedure.
SQL Server
Snowflake SQL
Related EWIs
SSC-EWI-0068: User defined function was transformed to a Snowflake procedure.
Last updated