SnowConvert AI – Diferenças funcionais do SQL Server-Azure Synapse¶
Applies to
SQL Server
Azure Synapse Analytics
SSC-FDM-TS0001¶
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TS0077.
Descrição¶
Esta mensagem é exibida quando há uma cláusula de agrupamento que não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0002¶
Descrição¶
Esta mensagem é exibida quando há uma cláusula de agrupamento que não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0003¶
XP_LOGININFO mapeado para UDF personalizado
Descrição¶
Esta mensagem é exibida quando o procedimento XP_LOGININFO é executado e retorna o seguinte conjunto de colunas (Consulte a documentação do SQL SERVER para obter mais informações)
| account name | type | privilege | mapped login name | permission path |
To replicate this behavior, there is a query that select the columns from the APPLICABLE_ROLES view in Snowflake, which returns the following set of columns (See Snowflake documentation for more info)
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
|---|
As colunas originais do SQL Server são mapeadas conforme mostrado na próxima tabela. Eles podem não ser completamente equivalentes.
| SQL Server | Snowflake | |
|---|---|---|
| account name | GRANTEE | |
| type | ROLE_OWNER | |
| privilege | ROLE_NAME | |
| mapped login name | GRANTEE | |
| permission path | NULL |
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0004¶
Descrição¶
This message is shown when a BULK INSERT was transformed and a PUT command is added to the output code. It happens because the PUT command cannot be executed using the SnowSQL Web UI. To successfully execute it, any user should have the SnowCLI installed before.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Instale SnowCLI.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0005¶
Não é possível converterTRY_CONVERT/TRY_CAST para TRY_CAST
Descrição¶
This FDM is added when a TRY_CONVERT or TRY_CAST cannot be converted to a TRY_CAST in Snowflake.
A função TRY_CAST do Snowflake tem uma limitação, pois permite apenas a conversão de expressões de cadeia de caracteres. No entanto, as funções TRY_CONVERT e TRY_CAST do Transact permitem qualquer expressão de tipo de dados.
Atualmente, a transformação de TRY_CONVERT ou TRY_CAST para TRY_CAST do Snowflake só é realizada para expressões de cadeia de caracteres ou expressões que a ferramenta possa identificar como cadeias de caracteres no contexto.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0006¶
A cláusula EXECUTEAS «user_name» não existe no Snowflake e o usuário que chama o procedimento deve ter todos os privilégios necessários.
Descrição¶
Esta mensagem é exibida quando o SnowConvertAI encontra um procedimento com uma cláusula EXECUTE AS “user_name”. Isso não é compatível com o Snowflake; portanto, foi alterado para EXECUTE AS CALLER.
Esta cláusula especifica o contexto de segurança sob o qual o procedimento deve ser executado.
Nota
Para obter mais detalhes, consulte a documentação sobre a funcionalidade da cláusula.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0007¶
A cláusula FOR REPLICATION não existe no Snowflake.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra um procedimento com uma cláusula FOR REPLICATION. Isso não é compatível com o Snowflake, portanto, foi removido.
Esta cláusula especifica que o procedimento foi criado para replicação. Consequentemente, ele não pode ser executado no Assinante.
Nota
Para obter mais detalhes, consulte a documentação sobre a funcionalidade da cláusula.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0008¶
A função FORMATMESSAGE foi convertida para UDF
Descrição¶
Este aviso foi adicionado porque a função FORMATMESSAGE estava sendo utilizada e foi substituída por FORMATMESSAGE_UDF. O motivo para adicionar o aviso é que a função FORMATMESSAGE_UDF utilizada para substituir a FORMATMESSAGE não lida corretamente com todos os tipos de formatos e pode gerar um erro em determinadas condições.
Valores numéricos não assinados que são fornecidos como negativos preservarão o sinal em vez de converter o valor. Além disso, o espaço reservado %I64d não é compatível com a função UDF; portanto, gerará um erro quando utilizado.
In the FORMATMESSAGE_UDF, an error will happen if the given number of arguments is different than the number of placeholders.
Este UDF não é compatível com o uso de IDs de números de mensagem.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Evite usar o espaço reservado
%I64dna mensagem.Use a mensagem diretamente como uma cadeia de caracteres em vez de usar um ID de mensagem como primeiro argumento.
Certifique-se de que o número de espaços reservados seja o mesmo que o número de argumentos após a mensagem.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0009¶
Encrypted with não compatível no Snowflake.
Descrição¶
Este aviso é adicionado quando há uma ENCRYPTED WITH utilizada em uma definição de coluna. Como isso não é compatível com o Snowflake, está sendo removida e um aviso é adicionado.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0010¶
A função CURRENT_DATABASE tem comportamento diferente em certos casos.
Descrição¶
Este EWI é adicionado quando a função DB_NAME é transformada em CURRENT_DATABASE porque o Snowflake não é compatível com o parâmetro database_id e a função CURRENT_DATABASE sempre retornará o nome do banco de dados atual.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0011¶
Valor padrão não permitido no Snowflake.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TS0078.
Descrição¶
Esse erro é adicionado ao código quando expressões como chamadas de função, nomes de variáveis ou constantes nomeadas seguem a opção padrão.
O Snowflake só é compatível com constantes explícitas, como números ou cadeias de caracteres.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0012¶
Não foram encontradas informações para a coluna. STRING utilizado para corresponder à operação CAST
Descrição¶
Este EWI é adicionado em funções definidas pelo usuário com valores de tabela, em que o tipo de retorno de uma coluna não pode ser determinado durante a conversão. STRING é utilizado como padrão para corresponder à operação CAST na instrução SELECT <!–TODO: search for a broken reference.->
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
O usuário deve verificar qual é o tipo de dados correto que não foi possível encontrar e alterá-lo na definição da instrução
RETURNS TABLE.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0013¶
As linhas do cursor do Snowflake Scripting não são modificáveis.
Descrição¶
Este EWI é adicionado quando os cursores estão abertos para modificação no código de entrada. O Snowflake Scripting não permite modificar linhas de cursor.
Exemplo de código:¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0014¶
Coluna computada transformada
Descrição¶
Este aviso é adicionado quando uma coluna computada do SQL Server é transformada em seu equivalente do Snowflake. É adicionado porque, em alguns casos, a equivalência funcional pode ser afetada.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional do usuário é necessária; ele é apenas informativo.
Adicione alterações manuais à expressão não transformada.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0016¶
As colunas XML no Snowflake podem ter um formato diferente
Descrição¶
This warning is added when an SQL Server FOR XML clause with a non-empty path is transformed to its Snowflake equivalent using FOR_XML_UDF. It is added because columns in XML could be different.
Nota
FOR XML PATH('') (empty path without a ROOT clause) is a common SQL Server string concatenation pattern and is not an XML generation scenario. These cases are transformed to LISTAGG instead of FOR_XML_UDF, and this FDM is not emitted. See the SELECT FOR section for details.
Exemplo de código¶
Considere o seguinte exemplo de tabela chamada employee.
Id |
Nome |
Dica |
|---|---|---|
1 |
Kinslee Park |
Desenvolvedor |
2 |
Ezra Mata |
Desenvolvedor |
3 |
Aliana Quinn |
Gerente |
Código de entrada:¶
Código¶
Saída¶
Código gerado:¶
Código¶
Saída¶
Práticas recomendadas¶
Nenhuma ação adicional do usuário é necessária; ele é apenas informativo.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0017¶
A função CURRENT_USER não é compatível com um ID de usuário como parâmetro.
Descrição¶
Este EWI quando funções como SUSER_NAME ou SUSER_SNAME contêm o identificador do usuário como parâmetro, pois este último não é compatível com a função CURRENT_USER do Snowflake.
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional é necessária por parte do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0018¶
O comando do console do banco de dados não é compatível.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TS0079.
Descrição¶
This FDM is added when SnowConvert AI finds a DBCC statement inside the input code.
Most DBCC statements are not supported in Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Nenhuma ação adicional do usuário é necessária; ele é apenas informativo.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0019¶
A mensagem de erro RAISERROR pode ser diferente devido ao formato da cadeia de caracteres do SQL Server.
Descrição¶
Este EWI é adicionado para notificar que a mensagem de erro RAISERROR pode ser diferente devido ao formato da cadeia de caracteres do SQL Server.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0020¶
A restrição padrão foi transformada em comentário e pode ter sido adicionada a uma definição de tabela.
Descrição¶
Esta FDM é adicionada quando a restrição padrão está presente em uma instrução Alter table.
Currently, support for that constraint is unavailable. A workaround to transform it is to define the table before using Alter Table. This allows SnowConvert AI to identify the references, and the default constraint is consolidated in the table definition. Otherwise, the constraint is only commented out.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Problemas conhecidos¶
Quando diferentes restrições padrão são declaradas na mesma coluna, apenas a primeira é refletida na instrução Create Table.
Quando uma restrição padrão é declarada em uma coluna ausente, a transformação não pode ser realizada devido à falta de dependências.
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0021¶
Um MASKING POLICY foi criado como substituto para MASKED WITH.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este EWI é adicionado quando a instrução Alter Table contém uma cláusula MASKED WITH. O motivo pelo qual isto é adicionado é informar que um valor MASKING POLICY aproximado foi criado como substituto para a função MASKED WITH.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Nota
MASKING POLICY será criado antes da instrução ALTER TABLE. E espera-se que tenha um comportamento aproximado. Alguns ajustes podem ser necessários em relação a funções e privilégios de usuário.
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0022¶
O usuário deve definir previamente a função de mascaramento.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este EWI ocorre quando uma MASKING POLICY é criada e uma função ou privilégio deve ser vinculado a ela para que o mascaramento de dados possa funcionar corretamente.
Exemplo de código¶
Código de entrada¶
Código gerado:¶
Nota
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.
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0023¶
Error function could be different in Snowflake
Descrição¶
Este EWI é adicionado na transformação das seguintes funções ERRORs devido à mudança de comportamento correspondente.
ERROR_MESSAGE A mensagem de SQLERRM pode ser diferente no Snowflake.
ERROR_STATE A propriedade SQLSTATE de destino pode retornar um número diferente devido a diferenças de plataforma.
ERROR_PROCEDURE A transformação foi alterada para retornar o procedimento armazenado em que a função é chamada.
Código de entrada:¶
Código gerado¶
Recomendação¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com.
SSC-FDM-TS0024¶
CURRENT_TIMESTAMP na instrução At Time Zone pode ter um comportamento diferente em certos casos.
Descrição¶
Esta FDM é adicionada quando At Time Zone contém CURRENT_TIMESTAMP. Isso ocorre porque o resultado pode ser diferente em algumas instâncias.
A principal diferença é que, no SQL Server, CURRENT_TIMESTAMP retorna a data e hora atuais do sistema no fuso horário do servidor, enquanto no Snowflake, CURRENT_TIMESTAMP retorna a data e hora atuais no fuso horário UTC (Tempo Universal Coordenado).
Código de entrada:¶
Servidor Sql¶
Resultado¶
2024-02-08 16:52:55.317 -10:00
Código gerado:¶
Snowflake¶
Resultado¶
2024-02-08 06:53:46.994 -1000
Práticas recomendadas¶
Este é um exemplo caso você queira manter o mesmo formato no Snowflake.
SQL Server¶
Resultado¶
2024-02-08 16:33:49.143 -10:00
No Snowflake, você pode usar ALTER SESSION para alterar o fuso horário padrão. Por exemplo:
Snowflake¶
Resultado¶
2024-02-08 16:33:49.143
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0025¶
DB_ID_UDF pode ter um comportamento diferente em certos casos.
Descrição¶
Esta FDM é adicionada para esclarecer que DB_ID_UDF tenta emular a função DB_ID SqlServer da melhor maneira possível. No SqlServer, o identificador designado a um banco de dados é único e, se o banco de dados for excluído, este ID nunca mais será utilizado; caso contrário, no Snowflake, esse identificador corresponde ao número designado ao banco de dados quando ele é criado. Ele também é único, mas é um número consecutivo, o que significa que, se este banco de dados for excluído, esse número será designado ao banco de dados que foi criado após o excluído.
Código de entrada:¶
Servidor Sql¶
Resultado¶
6
Código gerado:¶
Snowflake¶
Resultado¶
6
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0026¶
O caso DELETE não está sendo considerado na tabela temporária.
Descrição¶
Existe um padrão de instrução INSERT que requer uma transformação específica, que envolve a criação de uma tabela temporária. Esta FDM notifica que o caso DELETE não é considerado na transformação mencionada. Acesse INSERT com fator DML de tabela com MERGE como DML para obter mais informações sobre esse padrão.
Código de entrada:¶
Servidor Sql¶
Código gerado:¶
Snowflake¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0027¶
A instrução SET ANSI_NULLS ON pode ter um comportamento diferente no Snowflake.
Descrição¶
Esta FDM notifica que a instrução SET ANSI_NULLS ON pode se comportar de maneira diferente no Snowflake. Para obter mais informações sobre esta instrução, consulte o artigo ANSI_NULLS.
Código de entrada¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0028¶
Os parâmetros de saída devem estar na mesma ordem em que aparecem no código executado.
Descrição¶
Esta FDM notifica que os parâmetros de saída na instrução SP_EXECUTESQL devem estar na mesma ordem em que aparecem na cadeia de caracteres SQL para serem executados. Caso contrário, os valores de saída não serão atribuídos corretamente.
Exemplo de código¶
Caso correto¶
Conforme mostrado, @MaxAgeOUT e @MaxIdOUT aparecem na mesma ordem tanto na cadeia de caracteres SQL quanto nos parâmetros de saída.
Assim, durante a conversão do código, SELECT $1, $2 INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) atribuirá os valores corretamente.
Transact¶
Snowflake¶
Caso problemático¶
Conforme mostrado, @MaxAgeOUT e @MaxIdOUT nos parâmetros de saída aparecem em uma ordem diferente em comparação com a cadeia de caracteres SQL.
Assim, durante a conversão do código, SELECT $1, $2 INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) atribuirá os valores incorretamente. Max(AGE) será atribuído a :MAXID, e Max(ID) a :MAXAGE.
Isso precisa ser corrigido manualmente com a alteração da ordem dos parâmetros de saída na instrução SELECT INTO ou com a alteração da ordem na cadeia de caracteres SQL.
Transact¶
Snowflake¶
Práticas recomendadas¶
Certifique-se de que os parâmetros OUTPUT estejam na mesma ordem em que aparecem na cadeia de caracteres SQL.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0029¶
A instrução SET NOCOUNT foi transformada em comentário, o que não se aplica ao Snowflake.
Descrição¶
Quando o SnowConvert AI encontra uma instrução SET NOCOUNT, adiciona esta FDM. O SnowConvert AI então comenta a instrução SET NOCOUNT porque ela não é relevante no ambiente Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0030¶
A instrução SET ANSI_PADDING ON foi transformada em comentário, o que é equivalente no Snowflake.
Descrição¶
O Snowflake sempre preserva espaços finais em valores de cadeia de caracteres quando eles são inseridos em colunas. Esse comportamento é equivalente a SET ANSI_PADDING ON no SQL Server. Portanto, quando o SnowConvert AI encontra uma instrução SET ANSI_PADDING ON, adiciona esta FDM e a transforma em comentário.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0031¶
SET ANSI_WARNINGS ON statement is commented out because Snowflake generally adheres to ANSI-standard behaviors.
Descrição¶
O Snowflake geralmente se comporta como se ANSI_WARNINGS fosse ON por padrão, especialmente em relação ao tratamento de erros para estouro aritmético, divisão por zero e truncamento de cadeia de caracteres. Normalmente, você não precisa «definir» explicitamente um equivalente a ANSI_WARNINGS no Snowflake. Portanto, quando o encontra uma instrução SnowConvert AI ON`, adiciona esta FDM e a transforma em comentário.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0032¶
A propriedade de coluna IDENTITY não é compatível em CREATE TABLE AS STATEMENT, emulada usando ROW_NUMBER().
Descrição¶
O Snowflake não tem uma maneira direta de realizar CREATE TABLE AS com uma coluna de identidade. Embora o SnowConvert adicione uma coluna ROW_NUMBER em vez de IDENTITY para simular a enumeração da identidade. Essa transformação não cria uma coluna de identidade, o que significa que as linhas inseridas após a criação não serão incrementadas automaticamente.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0033¶
SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE.
Descrição¶
SQL Server Behavior
In SQL Server, SET QUOTED_IDENTIFIER ON is a syntax setting that is separate from collation. The database’s or column’s collation (for example, _CI for Case-Insensitive or _CS for Case-Sensitive) dictates whether quoted identifiers are case-sensitive or not. If a database has a _CI collation, then «MyColumn» and «mycolumn» are treated as the same.
Snowflake Behavior
In Snowflake, the behavior is simpler and more strict:
Unquoted Identifiers: Automatically stored and resolved in all uppercase, making them case-insensitive (mytable is the same as MYTABLE).
Quoted Identifiers: By default, identifiers enclosed in double quotes («MyColumn») are case-sensitive. They are stored exactly as you typed them.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
How to Achieve Equivalence in Snowflake
To get the same case-insensitive behavior for quoted identifiers as in SQL Server, you can set the QUOTED_IDENTIFIERS_IGNORE_CASE session parameter to TRUE in Snowflake.
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0034¶
Descrição¶
This FDM is generated when a DATA_COMPRESSION clause is encountered in a CREATE TABLE or ALTER TABLE statement. In SQL Server, DATA_COMPRESSION is used to specify whether data should be compressed (using ROW or PAGE compression) to reduce storage space and improve I/O performance. Snowflake automatically handles data compression using its proprietary compression algorithms, making the DATA_COMPRESSION clause unnecessary and unsupported. SnowConvert comments out the DATA_COMPRESSION clause during conversion.
Example Code¶
Input (SQL Server):¶
Output (Snowflake):¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0035¶
ENABLE/DISABLE trigger is automatically handled by Snowflake.
Descrição¶
This FDM is generated when SnowConvert AI encounters an ALTER TABLE ... ENABLE TRIGGER or ALTER TABLE ... DISABLE TRIGGER statement. In SQL Server, triggers can be manually enabled or disabled per table. In Snowflake, trigger execution is automatically managed by the platform — there is no need (or ability) to manually enable or disable individual triggers. SnowConvert AI comments out the trigger clause and adds this FDM marker.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
No manual action is typically required. Snowflake manages trigger behavior automatically.
If your workflow relied on temporarily disabling triggers for bulk loads, consider using Snowflake streams and tasks as an alternative pattern.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0036¶
HOST_NAME replaced with CURRENT_IP_ADDRESS, which returns the client IP address instead of the workstation name.
Descrição¶
This FDM is generated when SnowConvert AI encounters the HOST_NAME() function. In SQL Server, HOST_NAME() returns the workstation name of the client connection. Snowflake does not have a direct equivalent; CURRENT_IP_ADDRESS() is used as the closest alternative, but it returns the client’s IP address rather than the hostname. This is a functional difference because the returned values have different formats and semantics.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
If your application uses
HOST_NAME()for auditing or logging, verify that the IP address provides sufficient information for your use case.If the workstation name is required, consider passing it as a session parameter via
ALTER SESSION SETor storing it in a context variable.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0037¶
SET statement is not applicable in Snowflake as it has equivalent default behavior.
Descrição¶
This FDM is generated when SnowConvert AI encounters a SET statement whose specified value matches Snowflake’s default behavior. For example, SET CONCAT_NULL_YIELDS_NULL ON is the default in Snowflake (NULL concatenation yields NULL), SET NUMERIC_ROUNDABORT OFF matches Snowflake’s default of not raising errors on precision loss, and SET ARITHABORT ON/OFF has no behavioral impact in Snowflake. Since the setting is already the default, the statement is commented out.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
No action is required — the commented-out statement reflects behavior that is already the default in Snowflake.
If the non-default value of the same option is used elsewhere (e.g.,
SET CONCAT_NULL_YIELDS_NULL OFF), that will generate a separate EWI (SSC-EWI-TS0089) because the non-default behavior cannot be replicated.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0038¶
Agent Job migrated to Snowflake Task orchestration.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_add_job call that creates a SQL Server Agent Job containing SSIS package steps. The Agent Job definition is migrated to a Snowflake Task orchestration model. The original sp_add_job call is commented out and replaced with generated orchestration files in the ETL/AGENTJOBS/ output directory. The generated output includes Snowflake Task definitions, orchestrator stored procedures, and schedule mappings.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review the generated files in the
ETL/AGENTJOBS/output directory. These include Snowflake Task definitions and orchestrator stored procedures that replace the Agent Job.Validate the task scheduling and step ordering match your original Agent Job configuration.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0039¶
Agent Job schedule mapped to CRON expression in Snowflake Task.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_add_jobschedule or sp_add_schedule/sp_attach_schedule call that defines a schedule for a SQL Server Agent Job. The schedule parameters (freq_type, freq_interval, active_start_time) are mapped to a CRON expression for use in the corresponding Snowflake Task definition. The original schedule call is commented out.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verify the generated CRON expression in the Snowflake Task definition matches your intended schedule. Complex SQL Server schedules (e.g., monthly on specific days, bi-weekly) may need manual adjustment.
Review the
ETL/AGENTJOBS/output for the generatedCREATE TASK ... SCHEDULE = 'USING CRON ...'statement.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0040¶
Agent Job step migrated to orchestrator Stored Procedure.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_add_jobstep call for an Agent Job step with a TSQL or SSIS subsystem. The step is migrated to an orchestrator stored procedure that is generated in the ETL/AGENTJOBS/ output directory. The original sp_add_jobstep call is commented out. For SSIS steps, the SSIS package is also processed through SnowConvert AI’s ETL-to-dbt pipeline.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review the generated orchestrator stored procedure in
ETL/AGENTJOBS/to ensure the step logic is correctly translated.For SSIS steps, also review the generated dbt models and SQL files produced by the ETL-to-dbt pipeline.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0041¶
sp_delete_job translated to DROP TASK IF EXISTS.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_delete_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The sp_delete_job call is translated to a DROP TASK IF EXISTS statement targeting the corresponding Snowflake Task. The task name is derived from the original job name with a TASK_ prefix and uppercase formatting.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verify that the task name
TASK_{JOB_NAME}matches the task created by the Agent Job migration (SSC-FDM-TS0038).Note that dropping a task in Snowflake also removes its schedule. If the task has dependent tasks, those must be updated separately.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0042¶
sp_start_job translated to EXECUTE TASK.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_start_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The call is translated to an EXECUTE TASK statement that triggers the corresponding Snowflake Task immediately, regardless of its schedule.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
EXECUTE TASKtriggers a single immediate run of the task. It does not affect the task’s schedule or resume/suspend state.Ensure the task has been created and is in a
STARTEDstate if you also need it to run on schedule.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0043¶
sp_stop_job translated to ALTER TASK SUSPEND.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_stop_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The call is translated to ALTER TASK ... SUSPEND, which prevents future scheduled runs of the task. Note that ALTER TASK SUSPEND does not stop an already-running execution — it only prevents future runs from being triggered.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Be aware that
ALTER TASK SUSPENDonly prevents future scheduled executions. If the task is currently running, the in-progress execution will complete.In SQL Server,
sp_stop_jobattempts to cancel an in-progress job step. This capability does not exist in Snowflake’s Task model.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0044¶
sp_update_job @enabled translated to ALTER TASK RESUME or SUSPEND.
Descrição¶
This FDM is generated when SnowConvert AI encounters an sp_update_job call with the @enabled parameter for a SQL Server Agent Job that has been migrated to a Snowflake Task. When @enabled=1, the call is translated to ALTER TASK ... RESUME (starts the task’s schedule). When @enabled=0, it is translated to ALTER TASK ... SUSPEND (pauses the task’s schedule).
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verify that
RESUMEandSUSPENDmap correctly to your intended enable/disable behavior.If
sp_update_jobis called with parameters other than@enabled(e.g.,@description), those calls will generate SSC-EWI-TS0093 instead, as metadata updates are not applicable in Snowflake’s Task model.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0046¶
Rowversion/timestamp data type auto-generates unique values in SQL Server but not in Snowflake.
Descrição¶
This FDM is generated when SnowConvert AI encounters a column with the ROWVERSION or TIMESTAMP data type (they are synonyms in SQL Server). In SQL Server, these data types automatically generate unique binary values on every INSERT and UPDATE, providing a mechanism for optimistic concurrency control. SnowConvert AI maps the type to BINARY(8), which preserves the storage format but does not replicate the auto-generation behavior.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
If your application uses
ROWVERSIONfor optimistic concurrency control, implement an alternative pattern in Snowflake. Options include:A
NUMBERcolumn with a Snowflake sequence, updated via a stream/task or stored procedure on each modification.A
TIMESTAMP_NTZcolumn set toCURRENT_TIMESTAMP()on insert/update using a default value and a stream-triggered task.
If the column is only used for auditing (not concurrency), a
TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()column may suffice.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0047¶
SET IDENTITY_INSERT commented out.
Descrição¶
This FDM is generated when SnowConvert AI encounters a SET IDENTITY_INSERT ... ON or SET IDENTITY_INSERT ... OFF statement. In SQL Server, SET IDENTITY_INSERT ON allows explicit values to be inserted into an identity column, and OFF re-enables the automatic identity generation. In Snowflake, explicit inserts into IDENTITY/AUTOINCREMENT columns are allowed by default without any special setting. However, the sequence counter does not automatically adjust to account for explicitly inserted values, which may cause conflicts.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
After explicitly inserting values into an identity column in Snowflake, manually adjust the underlying sequence to avoid conflicts:
ALTER SEQUENCE seq_name SET START = <max_inserted_value + increment>.If you rely on toggling
IDENTITY_INSERTin batch load scripts, remove theSETstatements and add a sequence adjustment step at the end of the batch.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0047¶
SET IDENTITY_INSERT commented out.
Descrição¶
In SQL Server, SET IDENTITY_INSERT controls whether explicit values can be inserted into the identity column of a table. When set to ON, it allows explicit inserts; when set to OFF (the default), it prevents them.
In Snowflake, there is no equivalent statement because explicit inserts into IDENTITY / AUTOINCREMENT columns are always allowed by default. However, unlike SQL Server, the underlying sequence counter in Snowflake does not adjust to account for explicitly inserted values, which may lead to duplicate key conflicts on subsequent inserts.
SnowConvert AI comments out the SET IDENTITY_INSERT statement and attaches this FDM with a context-specific reason depending on whether the original statement was ON or OFF.
Exemplo de código¶
SET IDENTITY_INSERT ON¶
Código de entrada:¶
Código gerado:¶
SET IDENTITY_INSERT OFF¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
After migration, verify that any tables with
IDENTITY/AUTOINCREMENTcolumns do not experience duplicate key conflicts caused by the sequence counter not reflecting explicitly inserted values.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0046¶
Rowversion/timestamp data type auto-generation behavior not replicated in Snowflake.
Descrição¶
In SQL Server, the rowversion data type (also known as timestamp) automatically generates a unique BINARY(8) value every time a row is inserted or updated. This is commonly used for optimistic concurrency control.
Snowflake does not have an equivalent mechanism. The rowversion/timestamp data type is mapped to BINARY(8), but Snowflake’s BINARY(8) column will not auto-generate unique values on INSERT or UPDATE. Any application logic that depends on auto-incrementing row version values will need to be revised.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review any application logic that depends on
rowversion/timestampfor optimistic concurrency control and adjust accordingly.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0053¶
WITH CHECK clause removed. Snowflake constraints are informational only and not enforced.
Descrição¶
This message is shown when an ALTER TABLE ... WITH CHECK ADD CONSTRAINT ... FOREIGN KEY ... statement is converted. SnowConvert AI removes the WITH CHECK clause because Snowflake constraints are informational and are not enforced, so the validation semantics do not apply.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review whether the source workflow depended on SQL Server validating existing data when the constraint was added.
If validation is required after migration, implement an explicit data-quality check in Snowflake.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TS0054¶
CHECK/NOCHECK CONSTRAINT statement removed. Enabling or disabling constraints is not applicable in Snowflake.
Descrição¶
This message is shown when ALTER TABLE ... CHECK CONSTRAINT ... or ALTER TABLE ... NOCHECK CONSTRAINT ... is converted. SnowConvert AI comments out the statement because Snowflake does not support enabling or disabling constraints in the same way SQL Server does.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review any operational process that temporarily disables constraints during bulk loads or maintenance.
If the source process relied on constraint state transitions, redesign that workflow explicitly for Snowflake.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com