SnowConvert: Diferenças funcionais do Transact-SQL¶
Supported Environments
[x] Microsoft SQL Server
[x] Microsoft Azure Synapse Analytics
SSC-FDM-TS0001¶
Nota
Este FDM foi descontinuado. Para obter mais informações, consulte SSC-EWI-TS0077.
Descrição¶
Esse erro aparece quando você tenta usar uma cláusula de agrupamento que o Snowflake não suporta.
Exemplo de código¶
Código de entrada:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
Código gerado:¶
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_BIN NOT SUPPORTED **
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_CI_AI NOT SUPPORTED **
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- --** SSC-FDM-TS0001 - COLLATION collateName NOT SUPPORTED **
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0002¶
Descrição¶
Esse erro aparece quando você usa uma cláusula de agrupamento que o Snowflake não suporta.
Exemplo de código¶
Código de entrada:¶
SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
Código gerado:¶
SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0003¶
Descrição¶
Essa mensagem aparece ao executar o procedimento XP_LOGININFO, que retorna um conjunto específico de colunas. Para obter mais detalhes sobre essas colunas, você pode consultar a documentação do SQL Server.
account name | type | privilege | mapped login name | permission path |
Para entender as funções disponíveis, você pode consultar a visualização APPLICABLE_ROLES no Snowflake. Essa visualização fornece um conjunto de colunas com informações de função. Para obter mais detalhes, consulte a documentação do Snowflake.
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
---|
As colunas de origem do SQL Server são mapeadas para as colunas do Snowflake, conforme mostrado na tabela a seguir. Observe que esses mapeamentos podem não ser equivalentes exatos.
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:¶
EXEC xp_logininfo
EXEC xp_logininfo 'USERNAME'
Código gerado:¶
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF());
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF('USERNAME'));
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0004¶
Descrição¶
Essa mensagem aparece quando uma operação BULK INSERT
foi convertida e um comando PUT
foi incluído no código de saída. Como o comando PUT
não pode ser executado por meio da Web SnowSQL UI, os usuários devem ter a interface de linha de comando do Snowflake (SnowCLI) instalada no sistema antes de executar esse comando.
Exemplo de código¶
Código de entrada:¶
BULK INSERT #temptable FROM 'path/to/file.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
Código gerado:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638466175888203490
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638466175888203490
FILE_FORMAT = FILE_FORMAT_638466175888203490;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://path/to/file.txt @STAGE_638466175888203490 AUTO_COMPRESS = FALSE;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "#temptable" **
COPY INTO T_temptable FROM @STAGE_638466175888203490/file.txt;
Práticas recomendadas¶
Instale a interface de linha de comando do Snowflake (SnowCLI).
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0005¶
Descrição¶
Esse detalhe de migração de recurso (FMD) é adicionado quando uma operação TRY_CONVERT ou TRY_CAST do banco de dados de origem não pode ser convertida diretamente em uma função TRY_CAST no Snowflake.
A função Snowflake TRY_CAST limita-se a converter apenas expressões de cadeia de caracteres, enquanto as funções SQL Server TRY_CONVERT
e TRY_CAST
são mais flexíveis e podem converter expressões de qualquer tipo de dados.
A conversão para a função TRY_CAST
do Snowflake está atualmente limitada a expressões de cadeia de caracteres ou expressões que podem ser identificadas como cadeias de caracteres com base em seu contexto.
Exemplo de código¶
Código de entrada:¶
SELECT TRY_CAST(14.85 AS INT);
SELECT TRY_CONVERT(VARCHAR, 1234);
SELECT TRY_CONVERT(CHAR, 1);
SELECT TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00');
SELECT TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )');
Código gerado:¶
SELECT
CAST(14.85 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/;
SELECT
TO_VARCHAR(1234);
SELECT
TO_CHAR(1);
SELECT
TO_VARIANT('2017-01-01 12:00:00');
SELECT
TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )');
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0006¶
Descrição¶
Essa mensagem aparece quando o SnowConvert detecta um procedimento que contém uma cláusula EXECUTE AS 'user_name'
. Como o Snowflake não oferece suporte a esse recurso, ele é automaticamente convertido para EXECUTE AS CALLER
.
Esse parâmetro define as permissões de segurança que controlam como o procedimento é executado.
Nota
Para obter informações adicionais sobre a funcionalidade da cláusula, consulte a documentação.
Exemplo de código¶
Código de entrada:¶
CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
SELECT * FROM Customers;
END;
Código gerado:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0006 - EXECUTE AS 'user_name' CLAUSE DOES NOT EXIST IN SNOWFLAKE AND THE USER CALLING THE PROCEDURE SHOULD HAVE ALL THE REQUIRED PRIVILEGES **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0007¶
Descrição¶
Essa mensagem é exibida quando o SnowConvert detecta um procedimento que contém uma cláusula FOR REPLICATION
. Como o Snowflake não oferece suporte a esse recurso, a cláusula é removida automaticamente durante a conversão.
Esse procedimento foi projetado especificamente para fins de replicação e não pode ser executado no lado do assinante.
Nota
Para obter informações adicionais sobre a funcionalidade dessa cláusula, consulte a documentação.
Exemplo de código¶
Código de entrada:¶
CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
SELECT * FROM Customers;
END;
Código gerado:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0007 - FOR REPLICATION CLAUSE DOES NOT EXIST IN SNOWFLAKE **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0008¶
Descrição¶
Um aviso é exibido quando a função FORMATMESSAGE
é detectada porque foi substituída por FORMATMESSAGE_UDF
. Observe que o FORMATMESSAGE_UDF
pode não lidar corretamente com todos os tipos de formato e pode gerar erros em determinadas situações.
Os valores numéricos negativos manterão seu sinal negativo em vez de serem convertidos. O especificador de formato %I64d
não é compatível com UDFs e gerará um erro quando usado.
Na função FORMATMESSAGE_UDF, ocorrerá um erro se o número de argumentos fornecidos não corresponder ao número de espaços reservados no modelo de mensagem.
Essa função definida pelo usuário (UDF) não pode processar identificadores de números de mensagens.
Exemplo de código¶
Código de entrada:¶
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50); -- Unsigned int 50, 4294967246
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50); -- Unsigned octal 62, 37777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal %X, %x', -11, -50); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o', -50); -- Unsigned octal with prefix: 037777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#X, %x', -11,-50); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Bigint %I64d', 3000000000); -- Bigint 3000000000
SELECT FORMATMESSAGE('My message: %s %s %s', 'Hello', 'World'); -- My message: Hello World (null)
Código gerado:¶
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned int %u, %u', ARRAY_CONSTRUCT(50, -50)); -- Unsigned int 50, 4294967246
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal %o, %o', ARRAY_CONSTRUCT(50, -50)); -- Unsigned octal 62, 37777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal %X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal with prefix: %#o', ARRAY_CONSTRUCT(-50)); -- Unsigned octal with prefix: 037777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal with prefix: %#X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Bigint %I64d', ARRAY_CONSTRUCT(3000000000)); -- Bigint 3000000000
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('My message: %s %s %s', ARRAY_CONSTRUCT('Hello', 'World')); -- My message: Hello World (null)
Práticas recomendadas¶
Não use o espaço reservado
%I64d
nas mensagens.Use uma mensagem de cadeia de caracteres direta em vez de uma ID de mensagem como o primeiro argumento.
Certifique-se de que o número de espaços reservados corresponda ao número de argumentos que seguem a mensagem.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0009¶
Descrição¶
Esse aviso aparece quando uma coluna é definida com a opção ENCRYPTED WITH
. Como o Snowflake não oferece suporte à criptografia em nível de coluna, essa opção será removida durante o processo de conversão e uma mensagem de aviso será gerada.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] NVARCHAR(60)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
);
Código gerado:¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(60)
-- --** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
-- ENCRYPTED WITH (
-- COLUMN_ENCRYPTION_KEY = MyCEK,
-- ENCRYPTION_TYPE = RANDOMIZED,
-- ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
-- )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0010¶
Descrição¶
Esse aviso aparece quando a função SQL Server DB_NAME é convertida para a função CURRENT_DATABASE do Snowflake. Como a função CURRENT_DATABASE do Snowflake não suporta IDs de banco de dados como parâmetro e retorna apenas o nome do banco de dados atual, essa conversão pode afetar o comportamento do seu código.
Exemplo de código¶
Código de entrada:¶
SELECT DB_NAME(someId);
Código gerado:¶
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0011¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-TS0078.
Descrição¶
Esse erro ocorre quando expressões como chamadas de função, nomes de variáveis ou constantes nomeadas são colocadas após o caso padrão em uma instrução switch.
O Snowflake aceita apenas valores constantes explícitos, como números ou cadeias de caracteres, como entradas diretas.
Exemplo de código¶
Código de entrada:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
Código gerado:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
-- --** SSC-FDM-TS0011 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE **
-- DEFAULT RANDOM(10)
;
Document headings start at H4, not H1 [myst.header]¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0012¶
Descrição¶
Esse aviso aparece nas Funções definidas pelo usuário com valor de tabela quando o sistema não consegue determinar o tipo de retorno de uma coluna durante a conversão. Nesses casos, STRING
é automaticamente usado como o tipo padrão para corresponder à operação CAST
na instrução SELECT
.
Exemplo de código¶
Código de entrada:¶
CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
);
Código gerado:¶
CREATE OR REPLACE FUNCTION GetDepartmentInfo ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
SELECT
CAST(DepartmentID AS STRING),
CAST(Name AS STRING),
CAST(GroupName AS STRING)
FROM
HumanResources.Department
$$;
Práticas recomendadas¶
Verifique o tipo de dados que não pôde ser encontrado e atualize-o na instrução
RETURNS TABLE
.Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0013¶
Descrição¶
Esse aviso aparece quando o código-fonte contém cursores que podem ser modificados. No Snowflake Scripting, as linhas do cursor são somente de leitura e não podem ser modificadas.
Exemplo de código:¶
Código de entrada:¶
CREATE OR ALTER PROCEDURE modifiablecursorTest
AS
BEGIN
-- Should be marked with SSC-FDM-TS0013
DECLARE CursorVar CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar2 INSENSITIVE CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR KEYSET SCROLL_LOCKS
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar4 CURSOR DYNAMIC OPTIMISTIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar6 CURSOR STATIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar7 CURSOR READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Shouid not be marked
DECLARE CursorVar5 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
Código gerado:¶
CREATE OR REPLACE PROCEDURE modifiablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-FDM-TS0013
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar4 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar6 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar7 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Shouid not be marked
CursorVar5 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0014¶
Descrição¶
Aparece um aviso ao converter uma coluna computada do SQL Server para o Snowflake. Esse aviso indica que a funcionalidade pode não ser exatamente a mesma no Snowflake e no SQL Server.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
Código gerado:¶
CREATE OR REPLACE TABLE TestTable (
Col1 REAL AS (CAST(ExpressionValue AS REAL)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Práticas recomendadas¶
Esta mensagem é apenas para sua informação. Nenhuma ação é necessária.
Faça ajustes manuais em todas as expressões que não foram transformadas automaticamente.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0015¶
Descrição¶
Esse aviso aparece quando o tipo de dados de uma coluna do SQL Server não é compatível com o Snowflake.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE table1
(
column1 type1
);
Código gerado:¶
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Práticas recomendadas¶
Consulte a documentação dos tipos de dados do Snowflake para encontrar um tipo de dados adequado às suas necessidades.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0016¶
Descrição¶
Esse aviso aparece ao converter uma cláusula do SQL Server FOR XML para o Snowflake. Isso indica que a ordem das colunas na saída XML resultante pode ser diferente entre as duas plataformas.
Exemplo de código¶
Dada uma tabela de amostra denominada employee
, conforme mostrado abaixo.
Id |
Nome |
Dica |
---|---|---|
1 |
Kinslee Park |
Desenvolvedor |
2 |
Ezra Mata |
Desenvolvedor |
3 |
Aliana Quinn |
Gerente |
Código de entrada:¶
SELECT
e.id,
e.name as full_name,
e.hint
FROM
employee e
FOR XML PATH;
<row>
<id>1</id>
<full_name>Kinslee Park</full_name>
<hint>Developer</hint>
</row>
<row>
<id>2</id>
<full_name>Ezra Mata</full_name>
<hint>Developer</hint>
</row>
<row>
<id>3</id>
<full_name>Aliana Quinn</full_name>
<hint>Manager</hint>
</row>
Código gerado:¶
SELECT
--** SSC-FDM-TS0016 - XML COLUMNS IN SNOWFLAKE MIGHT HAVE A DIFFERENT FORMAT **
FOR_XML_UDF(OBJECT_CONSTRUCT('id', e.id, 'full_name', e.name, 'hint', e.hint), 'row')
FROM
employee e;
<row type="OBJECT">
<full_name type="VARCHAR">Kinslee Park</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">1</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Ezra Mata</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">2</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Aliana Quinn</full_name>
<hint type="VARCHAR">Manager</hint>
<id type="INTEGER">3</id>
</row>
Práticas recomendadas¶
Esta é uma mensagem informativa. Nenhuma ação é necessária.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0017¶
Descrição¶
Esse aviso aparece quando funções como SUSER_NAME
ou SUSER_SNAME
incluem um parâmetro de identificador de usuário, pois a função CURRENT_USER do Snowflake não oferece suporte a parâmetros de usuário.
Código de entrada:¶
SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
Código gerado:¶
SELECT
CURRENT_USER() /*** SSC-FDM-TS0017 - User ID parameter used in SUSER_NAME function is not supported in CURRENT_USER function and it was removed. ***/;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0018¶
Nota
Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-TS0079.
Descrição¶
Esse Detalhe de migração de recurso (FMD) aparece quando o SnowConvert detecta uma instrução DBCC (Comando do console do banco de dados) no código-fonte. Observe que o Snowflake não é compatível com a maioria das instruções DBCC.
Exemplo de código¶
Código de entrada:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Código gerado:¶
----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Recomendações¶
Esta é uma mensagem informativa. Nenhuma ação é necessária.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0019¶
Gravidade¶
Ruim
Descrição¶
Esse aviso indica que a mensagem de erro RAISERROR pode ser diferente devido às regras de formatação de cadeias de caractere do SQL Server.
Exemplo de código¶
Código de entrada:¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
Código gerado:¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-TS0019 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT **
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0020¶
Descrição¶
Esse marcador de detecção de recurso (FDM) é acionado quando uma restrição padrão é encontrada em uma instrução Alter Table.
Atualmente, não há suporte para esse tipo de restrição. Para contornar essa limitação, você deve definir a tabela antes de usar o comando Alter Table. Essa abordagem ajuda o SnowConvert a identificar as referências, e a restrição padrão será incluída na definição da tabela. Se você não seguir essa abordagem, a restrição aparecerá apenas como um comentário no código.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT (getdate()) FOR col1;
Código de saída:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT 50 FOR col1
;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP) FOR col1
;
Problemas conhecidos¶
Se várias restrições padrão forem definidas para a mesma coluna, somente a primeira aparecerá na instrução Create Table.
Se uma restrição padrão fizer referência a uma coluna que não existe, a transformação falhará porque a coluna necessária está faltando.
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0021¶
Gravidade¶
Ruim
Nota
Para facilitar a leitura, simplificamos algumas seções do código neste exemplo.
Descrição¶
Esse indicador de aviso antecipado (EWI) aparece quando uma instrução Alter Table inclui uma cláusula MASKED WITH. Isso indica que o sistema criou um MASKING POLICY aproximado para substituir a função MASKED WITH.
Exemplo de código¶
Código de entrada:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
Código de saída:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "default";
Nota
MASKING POLICY deve ser criado antes da execução da instrução ALTER TABLE. Observe que o comportamento pode não ser exatamente o mesmo do sistema de origem, e talvez seja necessário ajustar as funções e os privilégios do usuário de acordo.
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0022¶
Gravidade¶
Ruim
Nota
Para facilitar a leitura, simplificamos algumas seções do código neste exemplo.
Descrição¶
Esse erro ocorre quando MASKING POLICY exige a atribuição de funções ou privilégios específicos para que o mascaramento de dados funcione corretamente.
Exemplo de código¶
Código de entrada¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
Código gerado:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "partial_1_xxxxx_1";
Nota
Na linha 6, você pode adicionar um ou mais valores de função separados por vírgulas. Cada valor de função deve ser colocado entre aspas simples.
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0023¶
Gravidade¶
Ruim
Descrição¶
Esse aviso aparece durante a transformação da função ERROR_MESSAGE(). Observe que a mensagem de erro exata pode ser diferente no Snowflake.
Código de entrada:¶
SET @varErrorMessage = ERROR_MESSAGE()
Código de saída¶
BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
Recomendação¶
Se você precisar de assistência adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com.
SSC-FDM-TS0024¶
Descrição¶
Esse Mecanismo de Detecção de Função (FDM) é acionado quando At Time Zone
é usado com CURRENT_TIMESTAMP
. Essa verificação é necessária porque os resultados podem variar em determinados cenários.
A principal diferença entre o SQL Server e a função CURRENT_TIMESTAMP do Snowflake é o tratamento do fuso horário:
SQL Server: Retorna a data e a hora do sistema com base no fuso horário local do servidor
Snowflake: Retorna a data e a hora em UTC (Coordinated Universal Time)
Código de entrada:¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
Código de saída:¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
2024-02-08 06:53:46.994 -1000
Recomendações¶
Aqui está um exemplo de como manter a formatação consistente no Snowflake.
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
No Snowflake, você pode modificar o fuso horário padrão usando o comando ALTER SESSION. Por exemplo:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0025¶
Descrição¶
Este memorando de design de função (FDM) explica como a função DB_ID_UDF visa replicar o comportamento da função SQL Server DB_ID. Enquanto o SQL Server atribui identificadores permanentes e exclusivos a bancos de dados que nunca são reutilizados, o Snowflake lida com IDs de banco de dados de forma diferente. No Snowflake, IDs de banco de dados são um número sequencial atribuído no momento da criação. Se um banco de dados for excluído, seu número de ID ficará disponível e será atribuído ao próximo banco de dados recém-criado.
Código de entrada:¶
SELECT DB_ID('my_database');
6
Código de saída:¶
SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
6
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0026¶
Descrição¶
Ao transformar uma instrução INSERT que inclui um fator DML de tabela, é necessário criar uma tabela temporária. Observe que essa mensagem de detecção de recurso (FDM) indica que as operações DELETE não estão incluídas nessa transformação. Para obter mais detalhes sobre esse padrão, consulte INSERT com fator DML de tabela com MERGE como DML .
Código de entrada:¶
INSERT INTO T3
SELECT
col1,
col2
FROM (
MERGE T1 USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES ( T2.col1, T2.col2 )
WHEN MATCHED THEN
UPDATE SET T1.col2 = t2.col2
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2
) AS MERGE_OUT
WHERE ACTION_OUT='UPDATE';
Código de saída:¶
--** SSC-FDM-TS0026 - DELETE CASE IS NOT BEING CONSIDERED, PLEASE CHECK IF THE ORIGINAL MERGE PERFORMS IT **
CREATE OR REPLACE TEMPORARY TABLE MERGE_OUT AS
SELECT
CASE
WHEN T1.$1 IS NULL
THEN 'INSERT'
ELSE 'UPDATE'
END ACTION_OUT,
T2.col1,
T2.col2
FROM
T2
LEFT JOIN
T1
ON T1.col1 = T2.col1;
MERGE INTO T1
USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES (T2.col1, T2.col2)
WHEN MATCHED THEN
UPDATE SET
T1.col2 = t2.col2
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - OUTPUT CLAUSE NOT SUPPORTED IN SNOWFLAKE ***/!!!
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2 ;
INSERT INTO T3
SELECT
col1,
col2
FROM
MERGE_OUT
WHERE
ACTION_OUT ='UPDATE';
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0027¶
Descrição¶
Esta descoberta durante a migração (FDM) avisa que a instrução SET ANSI_NULLS ON
pode funcionar de forma diferente no Snowflake em comparação com o banco de dados de origem. Para obter informações detalhadas sobre essa instrução, consulte a documentação ANSI_NULLS.
Código de entrada¶
SET ANSI_NULLS ON;
Código de saída¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-TS0028¶
Descrição¶
Essa notificação indica que, ao usar SP_EXECUTESQL, os parâmetros de saída devem ser listados na mesma sequência em que aparecem na cadeia de caracteres SQL que está sendo executada. Se a ordem for diferente, os valores de saída serão atribuídos incorretamente.
Exemplo de código¶
Caso correto¶
A ordem dos parâmetros @MaxAgeOUT
e @MaxIdOUT
corresponde tanto à cadeia de caracteres de consulta SQL quanto à definição dos parâmetros de saída.
Ao converter o código, a instrução SELECT $1, $2 INTO:MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
armazenará os valores das colunas $1 e $2 nas variáveis MAXAGE e MAXID, respectivamente.
Transact¶
CREATE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxAgeOUT = @MaxAge OUTPUT,
@MaxIdOut = @MaxId OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXAGEOUT', 'MAXIDOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXAGE, :MAXID));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXAGE,
:MAXID
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Problemas comuns¶
A ordem dos parâmetros de saída @MaxAgeOUT
e @MaxIdOUT
na definição do procedimento armazenado é diferente da ordem na cadeia de caracteres de consulta SQL.
Como resultado, durante a conversão do código, a instrução SELECT $1, $2 INTO:MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
atribuirá valores em uma ordem inesperada. O valor de Max(AGE)
será atribuído a :MAXID
, enquanto Max(ID)
será atribuído a :MAXAGE
, o que é o oposto do pretendido.
Esse problema pode ser resolvido ajustando a ordem dos parâmetros de saída na instrução SELECT INTO ou modificando a ordem na cadeia de caracteres SQL para que corresponda.
Transact¶
CREATE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxIdOut = @MaxId OUTPUT,
@MaxAgeOUT = @MaxAge OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXIDOUT', 'MAXAGEOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXID, :MAXAGE));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXID,
:MAXAGE
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Recomendações¶
Certifique-se de que os parâmetros de OUTPUT correspondam à ordem em que aparecem na cadeia de caracteres SQL.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com