SnowConvert AI - SQL Server-Azure Synapse Issues¶
Applies to
SQL Server
Azure Synapse Analytics
Sybase
SSC-EWI-TS0001¶
User defined function body not generated
Severity¶
Critical
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI appears when SnowConvert AI handles a critical exception that causes the function body not to be generated during its translation.
Example Code¶
SQL Server¶
Snowflake¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0002¶
The ANSI_PADDING OFF is not supported in Snowflake.
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
In SQL Server, SET ANSI_PADDING controls how trailing blanks are stored in CHAR, VARCHAR, BINARY, and VARBINARY columns. When SET ANSI_PADDING OFF is active during a CREATE TABLE or ALTER TABLE statement, SQL Server records this setting as a column-level property on each column defined in that scope. This means the trimming behavior is permanently associated with the column definition, regardless of the session setting at the time data is inserted.
Specifically, when a column is created with ANSI_PADDING OFF:
VARCHARcolumns have trailing blanks trimmed on insert.VARBINARYcolumns have trailing zeros trimmed on insert.CHARcolumns are trimmed of trailing blanks (instead of being right-padded to the defined length).
Snowflake has no equivalent column-level property. Snowflake always preserves trailing spaces in string values (equivalent to ANSI_PADDING ON). There is no way to configure a Snowflake column to automatically trim trailing blanks on insert.
Since this is a storage-level semantic difference that cannot be automatically translated, SnowConvert AI flags the statement with this EWI.
Example Code¶
SQL Server¶
Snowflake¶
Limitations¶
Snowflake does not support ANSI_PADDING OFF semantics at any level (session, database, or column).
Wrapping inserts with
RTRIM: This only handles explicitINSERTstatements in the migrated code. It does not cover data loaded through ETL pipelines, external tools, or application code that also relied on the column’sANSI_PADDING OFFproperty.Session-level setting: Snowflake has no session parameter equivalent to
SET ANSI_PADDING.Column-level constraint or default: Snowflake does not allow defining a column property that automatically trims trailing spaces.
To fully replicate ANSI_PADDING OFF behavior in Snowflake, manual intervention is required at the data pipeline level for every affected column.
Best Practices¶
Identify all columns that were created under
SET ANSI_PADDING OFFin the source SQL Server database. You can querysys.columnswithis_ansi_padded = 0to find them.For each affected column, ensure that all data insertion paths (SQL scripts, ETL pipelines, application code) apply
RTRIMbefore inserting into the corresponding Snowflake column.Consider creating a Snowflake stored procedure or UDF wrapper that enforces trimming for the affected columns.
Review whether the trimming behavior is actually relied upon by downstream consumers. In some cases,
ANSI_PADDING OFFwas set by default in legacy scripts without the application depending on the trimming behavior.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0003¶
The ANSI_WARNINGS OFF is not supported in Snowflake.
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
In Transact-SQL, the statement SET ANSI_WARNINGS OFF disables warnings such as Division by Zero or arithmetic overflow. Since SET ANSI_WARNINGS OFF is not a directly configurable setting in Snowflake, SnowConvert AI will generate this EWI.
Example Code¶
SQL Server¶
Snowflake¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0009¶
The following transaction may contain nested transactions and this is considered a complex pattern not supported in Snowflake.
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
High
Description¶
This error is added to indicate when a transaction may contain nested transactions. In SQL Server, transactions can be nested. This means that it is possible to start a new transaction within an existing transaction. If after the first BEGIN statement, we execute another one, a new transaction will be opened and the current transaction count will be increased by one.\
On the other hand this is not supported in Snowflake, what will happen is that the second BEGIN statement will be ignored and we will still have only one transaction. For more information please refer to SQL Server Transactions.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
In Snowflake nested transactions will not cause compilation errors, they will simply be ignored. You can access the assessment reports to check if nested transactions are present.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0010¶
Common table expression in view not supported in Snowflake.
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
High
Description¶
This error is added when an invalid CTE is inside a view since views are materialized representations of queries, which means that they only define how data is retrieved and presented, not how it is manipulated.
Code Example¶
Input Code:¶
Generated Code:¶
Related EWI¶
SSC-EWI-0021: Not supported.
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0013¶
Computed column transformed
Note
This EWI is deprecated, please refer to SSC-FDM-TS0013 documentation
Severity¶
Low
Description¶
This warning is added when an SQL Server computed column is transformed to its Snowflake equivalent. It is added because, in some cases, the functional equivalence could be affected.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
No additional user actions are required; it is just informative.
Add manual changes to the not-transformed expression.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0015¶
Data type is not supported in Snowflake
Severity¶
Medium
Description¶
This warning is added when an SQL Server column has an unsupported type in Snowflake.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Check the Snowflake data types documentation to find an equivalent for the data type.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0016¶
Translation for ODBC Scalar function pending
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when SnowConvert AI finds an ODBC Scalar function inside the input code.
User-defined functions are not supported in ODBC Scalar Function.
Code Example¶
Input Code:¶
Generated Code:¶
Related EWI¶
SSC-EWI-0073: Pending Functional Equivalence Review.
Best Practices¶
No additional user actions are required; it is just informative.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0017¶
Masking not supported
Severity¶
Low
Description¶
This EWI is added when SnowConvert AI finds a masked column inside a CREATE TABLE statement. This functionality doesn’t work by adding the option in the column declaration. Manual effort is needed to have the same behavior as SQL Server.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
SnowConvert AI is not generating MASKING POLICIES in the current version, so they have to be created manually. E.g.:
The first step is to create a masking policy administrator role.
The second one is to grant the necessary privileges to the created role.
The next step is to create the masking policy functions.
Note
For sample purposes, we are taking some examples of masking functions in SQL Server, and manually translating it into its equivalent in Snowflake.
The final step is to add the masking policy to the column that originally had the masking option in SQL Server.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0023¶
Bulk option not supported
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when some option in a BULK INSERT could not be mapped. The translated bulk options should be reflected as FILE FORMAT options.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Visit the SnowSQL CLI user guide.
If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWI¶
SSC-FDM-TS0004: PUT statement not supported on UI.
SSC-EWI-TS0024¶
Incomplete transformation for Bulk Insert
Severity¶
Low
Description¶
This EWI is added when a BULK INSERT inside a stored procedure was not identified at all, so the dependencies for the complete transformation will not be generated. Also the transformed COPY INTO retrieves the file from a tempStage that needs to be created manually.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
To retrieve the file, manually create a STAGE and a FILE FORMAT.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0025¶
ERROR_SEVERITY function transformed
Severity¶
Low
Note
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or –PLTargetLanguage JavaScript
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when ERROR_SEVERITY built-in function is translated. By default, the function will return 16 as it is the most common severity in SQL Server. The generated UDF should retrie
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0026¶
With Delete Query turned to Create Table.
Severity¶
Low
Description¶
This EWI is added when a Common Table Expression With a Delete From is transformed to a Create or Replace Table.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
No additional user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0032¶
Bulk Insert Partially Translated
Warning
The EWI is only generated when Javascript is the target language for Stored Procedures. This is a deprecated translation feature, as Snowflake Scripting is the recommended target language for Stored Procedures.
Severity¶
High
Note
Generate Procedures and Macros using JavaScript as the target language adding the following flag -t JavaScript or –PLTargetLanguage JavaScript
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added to a literal that was originally a concatenation, when the contained code had a BULK INSERT statement. The PUT command resulting from the BULK INSERT translation is not supported when executing code that was originally Dynamic SQL.
For this reason, the PUT command must be extracted from the output code and executed manually outside of the procedure that contains it. Keep in mind that if there are many BULK INSERT statements in Dynamic SQL sentences within the procedure, it is advised to split this procedure to be able to manually execute the corresponding PUT command for each translated BULK INSERT.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Extract the
PUTcommand that resulted from the DynamicBULK INSERTstatement, and execute it before calling the procedure.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0034¶
RETURNS clause incomplete due to missing symbols
Severity¶
High
Description¶
This EWI is added to the output code when the RETURNS TABLE clause of a CREATE FUNCTION could not be properly generated. This happens when the columns that must be specified in the resulting RETURNS TABLE clause cannot be inferred by SnowConvert AI, thus leaving the RETURNS TABLE clause empty.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
The causes for this issue may vary. Be sure to include all the objects that your code needs. If the issue persists even though the migration has access to all the necessary objects, please do contact us with information about your specific scenario.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0035¶
Declaring a Cursor Variable that it is never initialized is not supported.
Severity¶
Medium
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
Currently, a Cursor Variable that is declared but never initialized is not supported by Snowflake. Thus, the EWI is added, and the code commented out.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0036¶
Snowflake Scripting only supports Local Cursors.
Severity¶
Medium
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when Cursors other than Local Cursors are identified. Currently, Snowflake Scripting only supports Local Cursors. Thus, all Cursors are translated as Local Cursors.
Code Example¶
Input Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0037¶
Snowflake Scripting Cursors are non-scrollable.
Severity¶
Medium
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
Snowflake Scripting Cursors are non-scrollable. Currently, only FETCH NEXT is supported.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0039¶
Multiple SET Statements for the same cursor found.
Severity¶
Medium
Description¶
This EWI is added when multiple SET Statements for the same cursor are found; All additional SET Statements are also commented out. This happens because having multiple SET Statements for the same cursor is not valid in Snowflake Scripting.
Example Code:¶
This EWI is added when multiple SET Statements for the same cursor are found; All additional SET Statements are also commented out. This happens because having multiple SET Statements for the same cursor is not valid in Snowflake Scripting.¶
Example Code:¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0041¶
XML data type methods are not supported in Snowflake.
Severity¶
Medium
Description¶
This EWI is added for the following XML data type methods that are not supported in Snowflake SQL:
Value
Query
Exist
Modify
Nodes
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Consider using UDFs to emulate the behavior of the source code
You can check this documentation and review some possible approaches to work with XML datatypes in Snowflake.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0043¶
WITH XMLNAMESPACES is not supported in Snowflake.
Severity¶
Medium
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added fort the WITH XMLNAMESPACES clause which is not supported in Snowflake SQL
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Consider using UDFs to emulate the behavior of the source code. The following code provides suggestions of UDFs that can be used to achieve recreating the original behavior:
SQL Server¶
Snowflake SQL¶
If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWI¶
SSC-PRF-TS0001: Performance warning - recursion for CTE not checked. Might require a recursive keyword.
SSC-EWI-TS0044: FOR XML clause is not supported in Snowflake.
SSC-EWI-TS0015: Data type not supported in Snowflake
SSC-EWI-TS0044¶
FOR XML clause is not supported in Snowflake.
Severity¶
Critical
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added for the FOR XML clause which is not supported in Snowflake SQL
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Consider using UDFs to emulate the behavior of the source code. The following code provides suggestions of UDFs that can be used to achieve recreating the original behavior:
SQL Server
Query¶
Result¶
Snowflake¶
Query¶
Result¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0045¶
Labeled Statement is not supported in Snowflake Scripting.
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when SnowConvert AI encounters a labeled statement in T-SQL that cannot be automatically transformed.
When GOTO/Label patterns appear inside a stored procedure with only forward jumps and top-level labels, SnowConvert AI automatically transforms them into nested procedure definitions with CALL/RETURN semantics — no EWI is emitted in those cases. See the LABEL and GOTO translation reference for details on the transformation.
This EWI is only emitted when the label cannot be transformed. This happens when the procedure contains a backward GOTO (one that targets a label appearing earlier in the source, which would require recursive calls), when labels appear inside anonymous blocks or UDFs (which do not support nested procedure definitions), or when labels are declared inside nested control flow blocks like IF, WHILE, or TRY (which cannot be extracted into nested procedures).
Code Example¶
The following example shows a backward GOTO pattern (retry logic) where the label RetryConnection appears before the GOTO that targets it, preventing automatic transformation:
Input Code:¶
Generated Code:¶
Best Practices¶
For backward GOTO patterns like retry logic, refactor the control flow to use
WHILEorLOOPconstructs instead.For labels in anonymous blocks or UDFs, restructure the code into separate procedures or use
IF/ELSEcontrol flow.Forward GOTO/Label patterns inside stored procedures are automatically transformed — no manual action is required for those cases.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0046¶
System table is not supported in Snowflake.
Severity¶
Medium
Description¶
This EWI is added when referencing SQL Server system tables not supported or without equivalent in Snowflake SQL. See the supported and unsupported system tables reference for the complete list.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0047¶
RAISERROR Error Message may differ because of the SQL Server string format.
Note
This EWI is deprecated, please refer to SSC-FDM-TS0019 documentation
Severity¶
Low
Description¶
This EWI is added to notify that the RAISERROR Error Message may differ because of the SQL Server string format.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0049¶
Multiple Line If Body translation planned to be delivered in the future.
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Medium
Description¶
Most of the cases inIF statements that contain a Begin ... End block inside their body are supported. This is a successful scenario (no SSC-EWI-TS0049 generated).
Code Example¶
Input Code:¶
Generated Code:¶
Note
In a general code example (Like the on top) the conversion is done successfully. But there are some edge cases where the “IF” statement is not converted and the EWI will be generated.
Manual Support¶
Case 1: Single Statement¶
For these cases, the transformation would be straightforward, since the transformed statement would appear in a select clause
Case 2: Multiple Statements¶
For cases in which multiple statements are being transformed, we should transform the N Statement, and use it as the source table for the N+1 Statement.
Case 3: Multiple set statements¶
For these cases, it will be necessary to replicate a transformation for each set statement.
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0055¶
Default constraint was commented out and may have been added to a table definition.
Note
This EWI is deprecated, please refer to SSC-FDM-TS0020 documentation.
Severity¶
Medium
Description¶
This EWI is added when the default constraint is present in an Alter Table statement.
Currently, there is no support for that constraint. A workaround available to transform it, is when the table is previously defined to the Alter Table, in this way we identify the references, and the default constraint is unified on the table definition; otherwise, the constraint is only commented out.
Code Example¶
Input Code:¶
Generated Code:¶
Note
If all the content of the Alter Table is invalid, the Alter Table will be commented out.
Known Issues¶
When different default constraints are declared over the same column, only the first will be reflected on the Create Table Statement.
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0056¶
A MASKING POLICY was created as a substitute for MASKED WITH.
Note
This EWI is deprecated, please refer to SSC-FDM-TS0021 documentation
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when the Alter Table statement contains a MASKED WITH clause. The reason this is added is to inform that an approximate MASKING POLICY was created as a substitute for the MASKED WITH function.
Code Example¶
Input Code:¶
Generated Code:¶
Note
The MASKING POLICY will be created previous to the ALTER TABLE statement. And it is expected to have and approximate behaviour. Some tweaks might be needed in regards to roles and user privileges. <!– TODO: You can relate to Broken link broken-reference “mention” for further details.>
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0057¶
The user must previously define the masking role.
Note
This EWI is deprecated, please refer to SSC-FDM-TS0022 documentation
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This is EWI occurs when a MASKING POLICY is created and a role or privilege must be linked to it so the data masking could work properly.
Code Example¶
Input code¶
Generated Code:¶
Note
As shown on line 6, there is a placeholder where the defined roles can be placed. There is room for one or several values separated by commas. Also, here, the use of single quotes is mandatory for each of the values.
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0060¶
Datetime interval not supported by Snowflake.
Severity¶
Medium
Description¶
This EWI is added when one of the following time parts is used as a parameter for a date-related function because they are not supported in Snowflake. For more information go to ‘supported date time parts (Date & Time Functions | Snowflake Documentation).
Code Example¶
Input code¶
Generated Code:¶
Best Practices¶
An UDF could be created to manually extract unsupported time parts in Snowflake.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0061¶
ALTER COLUMN not supported
Severity¶
Medium
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added whenever there is an unsupported ALTER COLUMN statement
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0063¶
Time zone not supported in Snowflake.
Severity¶
Critical
Description¶
This EWI is added when there are Time zones that are not supported in Snowflake
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
A user defined function can be created to support multiple timezones.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0067¶
Invalid parameters in OPENXML table-valued function.
Severity¶
Critical
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when there are invalid parameters in the OPENXML, specifically when the XML path cannot be accessed.
To avoid this EWI, please send the explicit node path through the parameters.
Input Code:¶
Generated Code:¶
Input code (Explicit parameter)¶
Generated Code (Explicit parameter)¶
Best Practices¶
Try to see if the path can be explicitly passed as a parameter.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0070¶
CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases.
Note
This EWI is deprecated, please refer to SSC-FDM-TS0024 documentation.
Description¶
This EWI is added when the At Time Zone has the CURRENT_TIMESTAMP. This is because the result may have different results in some instances.
The main difference is that in SQL Server, CURRENT_TIMESTAMP returns the current system date and time in the server time zone and in Snowflake CURRENT_TIMESTAMP returns the current date and time in the UTC (Coordinated Universal Time) time zone.
Input Code:¶
Sql Server¶
Result¶
2024-02-08 16:52:55.317 -10:00
Generated Code:¶
Snowflake¶
Result¶
2024-02-08 06:53:46.994 -1000
Best Practices¶
This is an example if you want to keep the same format in Snowflake.
SQL Server¶
Result¶
2024-02-08 16:33:49.143 -10:00
In Snowflake you can use ALTER SESSION to change the default time zone. For example:
Snowflake¶
Result¶
2024-02-08 16:33:49.143
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0072¶
RETURN statement will be ignored due to previous RETURN statement
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added when SELECT statements and OUPUT parameters should be returned. In this case, the resultsets from the SELECT statements are prioritized.
Input Code:¶
Generated Code:¶
Best Practices¶
Remove the RETURN statement that should be ignored.
If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWI¶
SSC-FDM-0020: Multiple result sets are returned in temporary tables;
SSC-EWI-TS0073¶
Error message could be different in snowflake
Note
This EWI is deprecated, please refer to SSC-FDM-TS0023 documentation
Severity¶
Low
Description¶
This EWI is added in the transformation of ERROR_MESSAGE(). The exact message of the error could change in Snowflake.
Input Code:¶
Generated Code¶
Recommendation¶
If you need more support, you can email us at snowconvert-support@snowflake.com.
SSC-EWI-TS0074¶
Cast result may be different from TRY_CAST/TRY_CONVERT function due to missing dependencies
Severity¶
Low
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
This EWI is added in the transformation of TRY_CAST and TRY_CONVERT functions. The exact result of these functions may change in Snowflake due to missing dependencies (SnowConvert AI couldn’t resolve some data types). This could be because the dependency was not in the source code.
Input Code:¶
Generated Code¶
Recommendation¶
If you need more support, you can email us at snowconvert-support@snowflake.com.
SSC-EWI-TS0075¶
Built In Procedure Not Supported
Severity¶
Medium
Description¶
Translation for built-in procedures is not currently supported.
Example Code¶
Input Code:¶
Generated Code:¶
Best Practices¶
No end-user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0076¶
Default Parameters May Need To Be Reordered
Note
This EWI is deprecated. SnowConvert AI now automatically reorders default parameters to the end of the parameter list. Please refer to SSC-FDM-0041 for the updated behavior.
Severity¶
Medium
Description¶
Default parameters may need to be reordered. Snowflake only supports default parameters at the end of the parameters declarations.
Example Code¶
Input Code:¶
Generated Code:¶
Best Practices¶
No end-user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0077¶
Collation Not Supported
Severity¶
Low
Description¶
This message is shown when there is a collate clause that is not supported in Snowflake.
Code example¶
Input Code:¶
Generated Code:¶
Best Practices¶
No additional user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0078¶
Default value not allowed in Snowflake.
Severity¶
Medium
Description¶
This error is added to the code when expressions like function calls, variable names, or named constants follow the default option.
Snowflake only supports explicit constants like numbers or strings.
Code Example¶
Input Code:¶
Generated Code:¶
¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0079¶
Database console command is not supported
Severity¶
Medium
Description¶
This EWI is added when SnowConvert AI finds a DBCC statement inside the input code.
Most DBCC statements are not supported in Snowflake.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
No additional user actions are required; it is just informative.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0080¶
Changing the execution context at runtime is not supported in Snowflake
Severity¶
High
Description¶
Users in SQL Server can use the command EXECUTE AS to temporarily change the execution context, this modifies the execution privileges and affects the results of context-dependent functions like USER_NAME(). The REVERT command can be used to restore the context previous to the last EXECUTE AS.
Snowflake only supports the definition of an execution context in procedures, using either the CREATE PROCEDURE or ALTER PROCEDURE statements. Changing the context at runtime is not supported.
Code Example¶
Input Code:
Output Code:
Best Practices¶
Refactor the code so it works without having to switch the context.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0081¶
Using a full join in a delete statement is not supported
Description¶
When transforming the DELETE statement, SnowConvert AI extracts the table references found in the FROM clause of the statement and moves them to the USING clause of the Snowflake delete statement.
The following EWI warns the user about the limitations of the outer join (+) syntax in Snowflake. To preserve the LEFT and RIGHT JOINs used in the original code, outer join syntax (+) is added to the conditions to indicate such behavior. However, in Snowflake, the (+) syntax can’t be used to indicate FULL JOINs. For more information, see Joins in the WHERE clause.
Example code¶
Input Code :¶
Generated Code:¶
Best Practices¶
Check the logic of your FULL JOIN, it might be possible to rewrite it as other type of JOIN. For example, the code included in the example code is essentially the same as a LEFT JOIN:
Input:
Output:
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0082¶
CROSS APPLY has been converted to LEFT OUTER JOIN and requires manual validation.
Description¶
Manual validation is required because the conversion from CROSS APPLY to LEFT OUTER JOIN can lead to incorrect results or unexpected behavior in Snowflake. While the two functions might seem similar, they handle certain situations differently, especially when the subquery has no matches or the subquery is correlated with the outer table.
Example code¶
Setup Data¶
Input Code :¶
Generated Code:¶
Best Practices¶
Key Scenarios Where LEFT OUTER JOIN May Fail¶
Filtering Behavior: If the original
CROSS APPLYwas intended to filter out rows from the main table that have no matches in the subquery, aLEFT OUTER JOINwill not replicate this behavior. Instead, it will include those rows withNULLvalues for the joined columns, which may not be the intended result.Correlated Subqueries:
CROSS APPLYis specifically designed to support correlated subqueries, where the subquery references columns from the outer query. A standardLEFT OUTER JOINdoes not support this pattern in the same way. Attempting to convert a correlatedCROSS APPLYto aLEFT OUTER JOINcan lead to syntax errors, Cartesian products (duplicate rows), or logically incorrect results.Result Set Differences: The semantics of
CROSS APPLYandLEFT OUTER JOINdiffer, especially when the subquery returns no rows.CROSS APPLYwill exclude such rows from the result, whileLEFT OUTER JOINwill include them withNULLvalues.
Recommendation: Always review and test the output of queries where CROSS APPLY has been converted to LEFT OUTER JOIN to ensure correctness.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0083¶
Error Message¶
ROLLBACK TRANSACTION requires the appropriate setup to work as intended.
Severity¶
Low
Description¶
This EWI is generated when a ROLLBACK TRANSACTION statement is encountered, indicating that SnowConvert has successfully transformed the statement into a Snowflake-compatible format. However, the transformation requires manual verification because Snowflake’s transaction rollback behavior differs significantly from SQL Server’s ROLLBACK TRANSACTION functionality.
Example Code¶
Input (SQL Server):¶
Output (Snowflake Scripting):¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0085¶
INSERT WITH EXECUTE statement requires manual review.
Severity¶
Medium
Description¶
This issue is generated when SnowConvert AI encounters an INSERT ... EXECUTE statement that cannot be automatically transformed. In SQL Server, INSERT ... EXEC inserts the result set of a stored procedure or dynamic SQL into a table. Snowflake does not support this syntax directly. When the statement appears at the top level (outside a stored procedure), SnowConvert AI cannot apply its standard transformation pattern and flags the statement for manual review.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Rewrite the logic using Snowflake Scripting: call the procedure separately, capture its result with
RESULT_SCAN(LAST_QUERY_ID()), and thenINSERT INTO ... SELECTfrom the result set.If the procedure returns a fixed schema, consider using a temporary table or
TABLE()function to capture the output.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0086¶
OPENQUERY is not supported in Snowflake.
Severity¶
High
Description¶
This issue is generated when SnowConvert AI encounters an OPENQUERY function. In SQL Server, OPENQUERY executes a pass-through query on a linked server and returns the result as a table. Snowflake does not have an equivalent linked server or OPENQUERY mechanism. The statement is preserved as-is with an EWI marker for manual migration.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Replace
OPENQUERYwith Snowflake external tables, external stages, or data sharing to access data from external sources.If the linked server points to another database, consider migrating that data into Snowflake or using Snowflake’s connector ecosystem (e.g., Snowflake Connector for Oracle).
For real-time access patterns, evaluate Snowflake External Network Access or External Functions.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0087¶
GOTO is not supported in Snowflake.
Severity¶
High
Description¶
This issue is generated when SnowConvert AI encounters a GOTO statement that cannot be automatically transformed.
When GOTO/Label patterns appear inside a stored procedure with only forward jumps to top-level labels, SnowConvert AI automatically transforms them into nested procedure definitions with CALL/RETURN semantics — no EWI is emitted in those cases. See the LABEL and GOTO translation reference for details on the transformation.
This EWI is only emitted when the GOTO cannot be transformed. This happens with backward GOTOs (where the target label appears before the GOTO in the source, which would require recursive calls), or when the GOTO appears inside anonymous blocks or UDFs (which do not support nested procedure definitions in Snowflake).
Code Example¶
The following example shows a backward GOTO used for retry logic. Because RetryConnection appears before the GOTO that jumps to it, the transformation cannot be applied and the EWI is emitted:
Input Code:¶
Generated Code:¶
Best Practices¶
For backward GOTO patterns like retry logic, refactor the control flow to use
WHILEorLOOPconstructs instead.For GOTO in anonymous blocks or UDFs, restructure the code into separate procedures or use
IF/ELSEcontrol flow.Forward GOTO patterns inside stored procedures are automatically transformed — no manual action is required for those cases.
If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWIs¶
SSC-EWI-TS0045: Labeled statement is not supported in Snowflake Scripting.
SSC-EWI-TS0103: GOTO targeting a label inside a nested block is not supported in Snowflake.
SSC-EWI-TS0088¶
Unsupported sequence options were removed during conversion.
Severity¶
Low
Description¶
This issue is generated when SnowConvert AI encounters a CREATE SEQUENCE statement with options that are not supported in Snowflake, such as MINVALUE, MAXVALUE, or CYCLE. These options are removed during conversion because Snowflake sequences only support START WITH and INCREMENT BY. The EWI message lists the specific options that were removed.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If your application relies on
CYCLEbehavior, implement a wrapper UDF that resets the sequence value when it exceeds a threshold.If
MINVALUEorMAXVALUEbounds are critical, add application-level validation or a Snowflake task to monitor sequence values.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0089¶
SET statement is not supported in Snowflake.
Severity¶
Low
Description¶
This issue is generated when SnowConvert AI encounters a SET statement that changes a session option not supported in Snowflake and whose non-default value cannot be replicated. For example, SET CONCAT_NULL_YIELDS_NULL OFF changes SQL Server’s NULL concatenation behavior, but Snowflake always treats NULL || value as NULL (equivalent to CONCAT_NULL_YIELDS_NULL ON). Similarly, SET NUMERIC_ROUNDABORT ON raises errors on precision loss, which Snowflake does not support. The original statement is preserved with an EWI marker.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Review the downstream code that depends on this
SEToption. ForCONCAT_NULL_YIELDS_NULL OFF, replaceNULLconcatenation patterns with explicitNVL()orCOALESCE()calls to handle NULL values.For
NUMERIC_ROUNDABORT ON, add explicit rounding or precision checks in the application logic.If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWIs¶
SSC-FDM-TS0037: SET statement with equivalent default behavior in Snowflake (e.g.,
SET CONCAT_NULL_YIELDS_NULL ON).
SSC-EWI-TS0090¶
Agent Job step uses an unsupported subsystem and requires manual migration.
Severity¶
Medium
Description¶
This issue is generated when SnowConvert AI encounters a SQL Server Agent Job step that uses a subsystem other than TSQL or SSIS (e.g., CmdExec, PowerShell, ANALYSISCOMMAND). These subsystems execute operating system commands or external tools that have no direct equivalent in Snowflake. The original sp_add_jobstep call is preserved with an EWI marker, and the step is not included in the generated Snowflake Task orchestration.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
For
CmdExecorPowerShellsteps, evaluate whether the logic can be rewritten as a Snowflake stored procedure, external function, or Snowflake task with a SQL body.For SSIS steps, use SnowConvert AI’s built-in ETL-to-dbt migration, which automatically generates orchestrator stored procedures.
Consider using Snowflake External Functions or Snowpark for operations that require external compute.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0091¶
Agent Job notification procedure requires manual setup of a Snowflake notification integration.
Severity¶
Medium
Description¶
This issue is generated when SnowConvert AI encounters a SQL Server Agent notification procedure such as sp_send_dbmail, sp_notify_operator, or similar email/alert procedures within an Agent Job context. These procedures rely on SQL Server’s Database Mail or Operator subsystem, which has no direct equivalent in Snowflake. A Snowflake notification integration must be manually configured to replicate this functionality.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Set up a Snowflake Notification Integration with an email provider or cloud messaging service (AWS SNS, Azure Event Grid, GCP Pub/Sub).
Use
SYSTEM$SEND_EMAIL()in Snowflake to send email notifications from stored procedures and tasks.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0092¶
Agent Job procedure references a dynamic job name that cannot be resolved statically.
Severity¶
Medium
Description¶
This issue is generated when SnowConvert AI encounters an Agent Job management procedure (sp_start_job, sp_stop_job, sp_delete_job, sp_update_job) where the @job_name parameter is a variable rather than a string literal. Because the job name cannot be resolved at conversion time, SnowConvert AI cannot determine which Snowflake Task to reference. The original statement is preserved with an EWI marker for manual resolution.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
If the job name is known at design time, replace the variable with a string literal so SnowConvert AI can resolve it to the corresponding Snowflake Task (e.g.,
EXECUTE TASK TASK_ETL_DAILY_LOAD).If the job name is truly dynamic, use
EXECUTE IMMEDIATEto build theEXECUTE TASKorALTER TASKstatement dynamically in Snowflake Scripting.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0093¶
Agent Job procedure is not supported.
Severity¶
Low
Description¶
This issue is generated when SnowConvert AI encounters a SQL Server Agent Job system procedure that does not have a supported translation to Snowflake. This includes procedures like sp_update_jobstep, sp_add_jobserver, and sp_update_job (when used without the @enabled parameter). These procedures manage Agent Job metadata that has no equivalent in Snowflake’s Task framework. The original statement is preserved with an EWI marker.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Review whether the procedure’s functionality is still needed in the Snowflake environment. Many Agent Job metadata operations (renaming steps, assigning servers) are not applicable in Snowflake’s Task model.
If the procedure modifies job scheduling or enablement, use
ALTER TASKin Snowflake instead.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0094¶
Error Message¶
WAITFOR DELAY variable may contain a time string incompatible with SYSTEM$WAIT.
Severity¶
Medium
Description¶
This EWI is generated when a WAITFOR DELAY statement uses a variable or parameter expression instead of a literal time value. The statement is transformed to CALL SYSTEM$WAIT(), which expects a numeric value representing seconds (or milliseconds). However, the variable may hold a time string in 'HH:MM:SS' format, which is incompatible with SYSTEM$WAIT.
For more information about SYSTEM$WAIT, see the Snowflake documentation.
Code Example¶
Input Code:¶
Generated Code:¶
Best Practices¶
Ensure the variable passed to
SYSTEM$WAITcontains a numeric value in seconds, not a time string in'HH:MM:SS'format.If the variable holds a time string, convert it to seconds before passing it to
SYSTEM$WAIT.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0095¶
SCOPE_IDENTITY() called without a preceding INSERT to an identity table in the same scope.
Severity¶
High
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
SnowConvert AI was unable to determine the target table for SCOPE_IDENTITY(). No preceding INSERT to an identity table found in the same scope.
This EWI is generated when SCOPE_IDENTITY() is called without a preceding INSERT statement to a table with an IDENTITY column in the same procedural scope. In SQL Server, SCOPE_IDENTITY() returns the last identity value inserted in the current scope, but without a detectable INSERT, SnowConvert AI cannot generate the appropriate time-travel query.
The function call is kept as-is with this EWI, requiring manual review to determine the correct implementation.
Code Example¶
Input Code (SQL Server):¶
Generated Code (Snowflake):¶
Best Practices¶
Review the stored procedure logic to identify where the INSERT statement occurs
If the INSERT is in a different scope (e.g., nested block), refactor the code to make the INSERT detectable
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0096¶
SCOPE_IDENTITY() references a table that cannot be resolved in the symbol table.
Severity¶
High
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
SnowConvert AI was unable to resolve the target table for SCOPE_IDENTITY(). Missing table definition.
This EWI is generated when SCOPE_IDENTITY() follows an INSERT statement, but the target table cannot be resolved in the symbol table. This may occur when:
The table is defined in an external file not included in the conversion
The table name uses dynamic SQL or is otherwise unresolvable
The table definition is missing or incomplete
Without a resolvable table reference, SnowConvert AI cannot determine which identity column to query in the generated time-travel query.
Code Example¶
Input Code (SQL Server):¶
Generated Code (Snowflake):¶
Best Practices¶
Ensure all table definitions are included in the conversion input
Verify that the table name in the INSERT statement matches the table definition
If the table is external, provide the schema definition or manually implement the identity retrieval logic
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0097¶
SCOPE_IDENTITY() references a table without an identifiable identity column.
Severity¶
High
Note
Some parts of the output code are omitted for clarity reasons.
Description¶
SnowConvert AI was unable to identify the identity column for SCOPE_IDENTITY(). Missing column definition.
This EWI is generated when SCOPE_IDENTITY() follows an INSERT statement to a table that exists in the symbol table but does not have an IDENTITY column defined. In SQL Server, SCOPE_IDENTITY() only returns values for tables with identity columns. Without an identifiable identity column, SnowConvert AI cannot generate the appropriate MAX(identity_column) query for the time-travel transformation.
Code Example¶
Input Code (SQL Server):¶
Generated Code (Snowflake):¶
Best Practices¶
Verify that the table definition includes an IDENTITY column specification
If the table should have an identity column, add the IDENTITY constraint to the CREATE TABLE statement before conversion
If the table should not use SCOPE_IDENTITY(), refactor the code to use a different method for retrieving the inserted ID
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0098¶
CONVERT with a non-literal style cannot be mapped to a Snowflake format string.
Severity¶
Medium
Description¶
This EWI is generated when the third argument of CONVERT is a variable or expression instead of a literal style code. SnowConvert AI can map literal style values to Snowflake format strings for TO_DATE and TO_TIMESTAMP, but when the style is dynamic it cannot determine the correct format at conversion time. In those cases SnowConvert AI falls back to CAST.
Code Example¶
Input Code (SQL Server):¶
Generated Code (Snowflake SQL):¶
Best Practices¶
Replace the dynamic style argument with a known literal format whenever possible.
If the style varies at runtime, rewrite the expression manually using the correct
TO_DATE,TO_TIMESTAMP, or conditional logic in Snowflake.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TS0103¶
GOTO targeting a label inside a nested block is not supported in Snowflake.
Severity¶
High
Description¶
This EWI is generated when a GOTO targets a label that is declared inside a nested control flow block (such as IF, WHILE, BEGIN...END, or TRY...CATCH). SnowConvert AI’s GOTO/Label decomposition can only transform labels that are declared at the top level of a procedure body — labels buried inside nested blocks cannot be extracted into standalone nested procedures. When this happens, the GOTO is preserved with this EWI marker, while top-level labels in the same procedure are still transformed normally.
Code Example¶
In this example, Done is a top-level label and is transformed into a nested procedure. However, HandlePartialFailure is declared inside a BEGIN...END block, so the GOTO targeting it cannot be transformed:
Input Code:¶
Generated Code:¶
Best Practices¶
Move the nested label to the top level of the procedure body so SnowConvert AI can transform it automatically.
Alternatively, replace the GOTO with structured
IF/ELSEorLOOPcontrol flow to avoid the jump entirely.If you need more support, you can email us at snowconvert-support@snowflake.com
Related EWIs¶
SSC-EWI-TS0045: Labeled statement is not supported in Snowflake Scripting.
SSC-EWI-TS0087: GOTO is not supported in Snowflake.
SSC-EWI-TS0104¶
System table query pattern could not be automatically converted.
Severity¶
Medium
Description¶
This EWI is generated when SnowConvert AI encounters a query pattern inside a system table query (such as sysconstraints) that it cannot translate automatically. Common triggers include:
OBJECT_NAME()called with an argument that doesn’t map to a known column (for example,OBJECT_NAME(status)instead ofOBJECT_NAME(constid)orOBJECT_NAME(id))OBJECT_NAME()compared against a non-literal value (a column reference, variable, or expression instead of a string literal)
In these cases the original expression is preserved and the EWI is emitted so you can review and rewrite the query manually.
Code Example¶
Input Code (SQL Server):¶
Generated Code (Snowflake SQL):¶
Input Code (SQL Server) - Non-literal comparison:¶
Generated Code (Snowflake SQL):¶
Best Practices¶
Replace
OBJECT_NAME(constid)withCONSTRAINT_NAMEandOBJECT_NAME(id)withTABLE_NAMEwhen queryingINFORMATION_SCHEMA.TABLE_CONSTRAINTS.Ensure that the comparison value is a string literal. If you need to compare against a variable or column, rewrite the query to use the equivalent
INFORMATION_SCHEMAcolumn directly.Review the sysconstraints translation reference for supported transformation patterns.
If you need more support, you can email us at snowconvert-support@snowflake.com