SnowConvert AI - SQL Server-Azure Synapse - CREATE PROCEDURE (Script Snowflake)¶
Transação BEGIN e COMMIT¶
Referência de tradução para converter a transação BEGIN/COMMIT do Transact-SQL em Snowflake SQL
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
Snowflake SQL, uma transação pode ser iniciada explicitamente com a execução de uma instrução BEGIN. O Snowflake oferece suporte aos sinônimos BEGINWORK e BEGINTRANSACTION. O Snowflake recomenda usar BEGINTRANSACTION.
A transaction can be ended explicitly by executing COMMIT. For more information, see the Snowflake Transactions documentation.
Amostra de padrões da origem¶
Os exemplos a seguir detalham as instruções de transação BEGIN e COMMIT.
Transact-SQL¶
BEGIN/COMMIT TRANSACTION¶
Iniciar/confirmar transação com rótulo¶
Snowflake SQL¶
BEGIN/COMMIT¶
Transação BEGIN/COMMIT com rótulo¶
Problemas conhecidos¶
As transações aninhadas não são compatíveis com o Snowflake. Consulte a documentação a seguir para obter mais informações: https://docs.snowflake.com/en/sql-reference/transactions
CALL¶
Referência de tradução para a instrução CALL
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
The CALL statement is not supported in Snowflake Scripting since this is part of the ODBC API and not a SQL statement, therefore this statement is not translated.
CASE¶
Referência de tradução para converter a expressão Case do Transact-SQL em Script Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
O Transact-SQL tem dois formatos possíveis da expressão Case, ambos com a finalidade de avaliar expressões e obter resultados condicionalmente. O primeiro refere-se a uma expressão Case simples que será avaliada se uma expressão input_expression corresponder a uma ou mais expressões when_expression. O segundo avaliará cada expressão booliana de forma independente. A cláusula else é suportada em ambos os formatos.
De acordo com a documentação oficial de Transact-SQL Case:
CASE pode ser usado em qualquer instrução ou cláusula que permita uma expressão válida. Por exemplo, você pode usar CASE em instruções como SELECT, UPDATE, DELETE e SET, e em cláusulas como select_list, IN, WHERE, ORDER BY e HAVING.
For more information, see the Transact-SQL CASE documentation.
Observação: o Transact-SQL permite encapsular opcionalmente a expressão input_expression e a expressão boolean_expression entre parênteses; o Snowflake Scripting também.
Amostra de padrões da origem¶
Os exemplos a seguir detalham dois cenários em que a expressão Case pode ser usada e suas diferenças em relação ao Snowflake Scripting.
Select usando Case¶
Transact-SQL¶
CASE simples¶
CASE pesquisada¶
Resultado¶
sqlLOGINID |
status |
|---|---|
adventure-works\ken0 |
SINGLE |
adventure-works\ erri0 |
SINGLE |
adventure-works\roberto0 |
MARIED |
adventure-works\rob0 |
SINGLE |
adventure-works\gail0 |
MARIED |
adventure-works\jossef0 |
MARIED |
adventure-works\dylan0 |
MARIED |
adventure-works\diane1 |
SINGLE |
adventure-works\gigi0 |
MARIED |
adventure-works\michael6 |
MARIED |
Script Snowflake¶
Observe que, nesse cenário, não há diferenças em relação à expressão Case em si.
Aviso
The declaration and assignment of the res variable is to demonstrate the functional equivalence between both languages. It does not appear in the actual output.
CASE simples¶
CASE pesquisada¶
Resultado¶
LOGINID |
STATUS |
|---|---|
adventure-worksken0 |
SINGLE |
adventure-works erri0 |
SINGLE |
adventure-worksoberto0 |
MARIED |
adventure-worksob0 |
SINGLE |
adventure-worksgail0 |
MARIED |
adventure-worksjossef0 |
MARIED |
adventure-worksdylan0 |
MARIED |
adventure-worksdiane1 |
SINGLE |
adventure-worksgigi0 |
MARIED |
adventure-worksmichael6 |
MARIED |
Set usando Case¶
O banco de dados AdventureWorks2019 foi usado em ambas as linguagens para obter os mesmos resultados.
Transact-SQL¶
Caso simples¶
Caso pesquisado¶
Resultado¶
resultado |
|---|
150 |
Script Snowflake¶
Aviso
Snowflake Scripting does not allow setting a case expression directly to a variable. Both Transact-SQL Case expression formats translate to the following grammar in Snowflake Scripting.
SimpleCase¶
Caso pesquisado¶
Resultado¶
resultado |
|---|
150 |
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente.
CREATE PROCEDURE¶
Referência de tradução para converter cláusulas CREATE PROCEDURE do Transact-SQL em Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
A instrução create procedure permite a criação de procedimentos armazenados que podem:
Aceitar parâmetros de entrada e retornar vários valores na forma de parâmetros de saída para o procedimento de chamada ou lote.
Conter instruções de programação que executam operações no banco de dados, inclusive a chamada de outros procedimentos.
Retorna um valor de status para um procedimento de chamada ou lote para indicar sucesso ou falha (e o motivo da falha).
For more information, see the Transact-SQL CREATE PROCEDURE documentation.
Amostra de padrões da origem¶
Procedimento armazenado sem corpo¶
A stored procedure without a body is an unusual scenario that is allowed in Transact-SQL. Snowflake Scripting does not allow defining procedures without a body, but the following example shows the equivalence.
Transact-SQL¶
Procedimento¶
Script Snowflake¶
Procedimento armazenado básico¶
O exemplo a seguir detalha um procedimento armazenado simples que incluirá um novo departamento de privacidade no banco de dados AdventureWorks2019.
Transact-SQL¶
Script Snowflake¶
Procedimento Alter¶
A transformação para o procedimento ALTER é equivalente ao procedimento básico.
Transact-SQL¶
Script Snowflake¶
Usando parâmetros¶
Você pode usar parâmetros para conduzir sua lógica ou construir instruções dinâmicas SQL dentro do procedimento armazenado. No exemplo a seguir, é criado um procedimento armazenado SetNewPrice simples, que define um novo preço de produto com base nos argumentos enviados pelo chamador.
Transact-SQL¶
Script Snowflake¶
Parâmetros de saída¶
A palavra-chave de saída do Transact-SQL indica que o parâmetro é um parâmetro de saída, cujo valor será retornado ao autor da chamada do procedimento armazenado. Por exemplo, o procedimento a seguir retornará o número de horas de licença de um funcionário específico.
Transact-SQL¶
Script Snowflake¶
Parâmetros opcionais¶
Um parâmetro é considerado opcional se tiver um valor padrão especificado quando for declarado. Não é necessário fornecer um valor para um parâmetro opcional em uma chamada de procedimento.
Transact-SQL¶
Script Snowflake¶
EXECUTE AS¶
A cláusula EXECUTE AS do Transact-SQL define o contexto de execução do procedimento armazenado, especificando qual conta de usuário o Mecanismo de Banco de Dados usa para validar as permissões dos objetos referenciados no procedimento. Por exemplo, podemos modificar o procedimento GetVacationHours anterior para definir diferentes contextos de execução.
Proprietário (padrão no Snowflake Scripting)
Transact-SQL¶
Script Snowflake¶
Chamador¶
Transact-SQL¶
Script Snowflake¶
Aviso
SELF e contextos de execução de usuários específicos («user_name») não são suportados no Snowflake Scripting.
READONLY AND VARYING PARAMETERS¶
O Snowflake não oferece suporte aos tipos de parâmetros READONLY e VARYING. Em vez disso, foi adicionado um FDM.
Transact-SQL¶
Script Snowflake¶
Problemas conhecidos¶
Argumentos opcionais não suportados¶
[VARYING] Aplica-se somente aos parâmetros cursor. Especifica o conjunto de resultados suportado como um parâmetro de saída. Esse parâmetro é construído dinamicamente pelo procedimento e seu conteúdo pode variar. O Snowflake Scripting não é compatível com CURSOR como um tipo de dados de retorno válido.
[= default] Torna um parâmetro opcional por meio da definição de um valor padrão. O Snowflake Scripting não suporta nativamente valores de parâmetros padrão.
[READONLY] Indica que o parâmetro não pode ser atualizado ou modificado no corpo do procedimento. Atualmente, não há suporte para o Snowflake Scripting.
[WITH RECOMPILE] Força o mecanismo de banco de dados a compilar o plano de consulta do procedimento armazenado sempre que ele for executado. Atualmente, não há suporte para o Snowflake Scripting.
[WITH ENCRYPTION] Usado para criptografar o texto de um procedimento armazenado. Somente usuários com acesso a tabelas do sistema ou arquivos de banco de dados (como usuários administradores do sistema) poderão acessar o texto do procedimento após sua criação. Atualmente, não há suporte para o Snowflake Scripting.
[FOR REPLICATION] Restringe o procedimento armazenado a ser executado somente durante a replicação. Atualmente, não há suporte para o Snowflake Scripting.
EWIs relacionados¶
SSC-EWI-0030: A instrução abaixo tem usos de SQL dinâmico.
SSC-EWI-0058: No momento, a funcionalidade não é compatível com o Snowflake Scripting.
CURSOR¶
Referência de tradução para converter a instrução CURSOR do Transact-SQL em Script Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Transact-SQL statements produce a complete result set, but there are times when the results are best processed one row at a time. Opening a cursor on a result set allows processing the result set one row at a time. You can assign a cursor to a variable or parameter with a cursor data type. For more information, see the Transact-SQL Cursors documentation.
Amostra de padrões da origem¶
Transact-SQL¶
Observe que os parâmetros a seguir são inerentemente suportados pelo Snowflake Scripting.
[LOCAL].
\[FORWARD_ONLY].
[FAST_FORWARD] Especifica FORWARD_ONLY (somenteFETCH NEXT) e READ_ONLY
[READ_ONLY] o WHERE CURRENT OF não existe no Snowflake Scripting.
Cursor¶
Resultado¶
Script Snowflake¶
Cursor¶
Resultado¶
Problemas conhecidos¶
Não há suporte para os seguintes parâmetros:
DECLARE CURSOR
[ GLOBAL ] Permite fazer referência ao nome do cursor em qualquer procedimento armazenado ou lote executado pela conexão. O Snowflake Scripting só permite o uso do cursor localmente.
[ SCROLL ] O Snowflake Scripting suporta apenas FETCH NEXT.
[ KEYSET | DYNAMIC ] Se, após a abertura de um cursor, for feita uma atualização na tabela, essas opções poderão exibir algumas das alterações ao buscar o cursor. O Snowflake Scripting suporta apenas STATIC, ou seja, após a abertura do cursor, as alterações na tabela não são detectadas pelo cursor.
[SCROLL_LOCKS] Especifica que as atualizações ou exclusões posicionadas feitas por meio do cursor têm garantia de êxito; o Snowflake Scripting não pode garantir isso.
[OPTIMISTIC] Quando uma atualização ou exclusão é feita por meio do cursor, ele usa comparações de valores da coluna de carimbo de data/hora ou um valor de soma de verificação, se a tabela não tiver coluna de carimbo de data/hora, para determinar se a linha foi modificada depois de ter sido lida no cursor. O Snowflake Scripting não tem um processo interno para replicá-lo.
[TYPE_WARNING]
FETCH
[PRIOR | FIRST | LAST] O Snowscripting suporta apenas NEXT.
[ABSOLUTE] O Snowflake Scripting suporta apenas NEXT, mas o comportamento pode ser replicado.
[RELATIVE] Snowflake Scripting, mas o comportamento pode ser replicado.
[ GLOBAL ] Permite fazer referência ao nome do cursor em qualquer procedimento armazenado ou lote executado pela conexão. O Snowflake Scripting só permite o uso do cursor localmente.
FETCH sem INTO não é compatível.
Quando a instrução FETCH está localizada dentro de um loop, ela é considerada um padrão complexo, pois pode ter um impacto no desempenho do código convertido pelo Snowflake. Consulte a seção de problemas relacionados para obter mais informações.
Buscar amostra dentro do loop¶
SQL Server¶
Snowflake¶
OPEN¶
[ GLOBAL ] Permite fazer referência ao nome do cursor em qualquer procedimento armazenado ou lote executado pela conexão. O Snowflake Scripting só permite o uso do cursor localmente.
CLOSE
[ GLOBAL ] Permite fazer referência ao nome do cursor em qualquer procedimento armazenado ou lote executado pela conexão. O Snowflake Scripting só permite o uso do cursor localmente.
DEALLOCATED Remove uma referência de cursor e não há equivalente no Snowflake Scripting.
WHERE CURRENT OF o uso dessa instrução não é suportado, por exemplo:
Variáveis de ambiente
@@CURSOR_ROWS
@@FETCH_STATUS
EWIs relacionados¶
SSC-FDM-TS0013: As linhas de cursor do Snowflake Scripting não podem ser modificadas.
SSC-PRF-0003: buscar dentro de um loop é considerado um padrão complexo, o que poderia degradar o desempenho do Snowflake.
DECLARE¶
Referência de tradução para converter a instrução DECLARE do Transact-SQL em Script Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
Transact-SQL DECLARE statement allows the creation of variables that can be used in the scope of the batch or a stored procedure. For more information, see the Transact-SQL DECLARE documentation.
Amostra de padrões da origem¶
Declarar variáveis¶
As variáveis podem ser criadas de diferentes maneiras. As variáveis podem ou não ter um valor padrão e várias variáveis podem ser declaradas na mesma linha.
Notice that Snowflake Scripting does not allow creating more than one variable per line.
Transact-SQL¶
Script Snowflake¶
Declarar variáveis de tabela¶
O Transact-SQL permite a criação de variáveis de tabela que podem ser usadas como tabelas regulares. O Snowflake Scripting não suporta isso; em vez disso, uma tabela pode ser criada e descartada no final do procedimento.
Transact-SQL¶
Script Snowflake¶
Instrução DECLARE fora de rotinas (funções e procedimentos)¶
Ao contrário do Transact-SQL, o Snowflake não suporta a execução de instruções isoladas como DECLARE fora de rotinas como funções ou procedimentos. Para esse cenário, a instrução deve ser encapsulada em um bloco anônimo, conforme mostrado nos exemplos a seguir. Essa instrução geralmente é usada antes de um SET STATEMENT.
Transact-SQL¶
Script Snowflake¶
Se houver um cenário com apenas instruções DECLARE, o bloco BEGIN…END deverá ter uma instrução RETURN NULL para evitar erros, pois esse bloco não pode estar vazio.
Transact-SQL¶
Script Snowflake¶
EXECUTE¶
Referência de tradução para converter a instrução Execute do Transact-SQL em Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Transact-SQL EXECUTE statement allows the execution of a command string or character string within a Transact-SQL batch, a scalar-valued user-defined function, or a stored procedure. For more information, see the Transact-SQL EXECUTE documentation.
Amostra de padrões da origem¶
Execução da cadeia de caracteres¶
EXECUTE pode ser usado para realizar operações SQL passadas diretamente como literais. No exemplo a seguir, ele é usado em um procedimento armazenado que insere um novo departamento de privacidade no banco de dados AdventureWorks2019.
Transact-SQL¶
Script Snowflake¶
Execução do procedimento armazenado¶
EXECUTE também pode ser usado para chamar um procedimento armazenado existente. O exemplo a seguir chamará o procedimento AddPrivacyDepartment que foi criado acima. Em seguida, ele executará um SELECT para verificar se o novo departamento foi incluído com sucesso.
Transact-SQL¶
Resultado¶
DepartmentID |
Nome |
GroupName |
ModifiedDate |
|---|---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2008-04-30 00:00:00.000 |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
2008-04-30 00:00:00.000 |
3 |
Vendas |
Vendas e marketing |
2008-04-30 00:00:00.000 |
4 |
Marketing |
Vendas e marketing |
2008-04-30 00:00:00.000 |
5 |
Compras |
Gerenciamento de Inventário |
2008-04-30 00:00:00.000 |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
2008-04-30 00:00:00.000 |
7 |
Produção |
Fabricação |
2008-04-30 00:00:00.000 |
8 |
Controle de produção |
Fabricação |
2008-04-30 00:00:00.000 |
9 |
Recursos Humanos |
Executivo Geral e Administração |
2008-04-30 00:00:00.000 |
1 0 |
Finance |
Executivo Geral e Administração |
2008-04-30 00:00:00.000 |
1 1 |
Serviços de informação |
Executivo Geral e Administração |
2008-04-30 00:00:00.000 |
1 2 |
Controle de documentos |
Garantia de Qualidade |
2008-04-30 00:00:00.000 |
1 3 |
Garantia de Qualidade |
Garantia de Qualidade |
2008-04-30 00:00:00.000 |
1 4 |
Instalações e manutenção |
Executivo Geral e Administração |
2008-04-30 00:00:00.000 |
1 5 |
Expedição e recebimento |
Gerenciamento de Inventário |
2008-04-30 00:00:00.000 |
1 6 |
Executivo |
Executivo Geral e Administração |
2008-04-30 00:00:00.000 |
1 7 |
Privacidade |
Executivo Geral e Administração |
2021-11-17 12:42:54.640 |
Script Snowflake¶
Resultado¶
DEPARTMENTID |
NAME |
GROUPNAME |
MODIFIEDDATE |
|---|---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2021-11-17 10:29:36.963 |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
2021-11-17 10:29:37.463 |
3 |
Vendas |
Vendas e marketing |
2021-11-17 10:29:38.192 |
4 |
Marketing |
Vendas e marketing |
2021-11-17 10:29:38.733 |
5 |
Compras |
Gerenciamento de Inventário |
2021-11-17 10:29:39.298 |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
2021-11-17 10:31:53.770 |
7 |
Produção |
Fabricação |
2021-11-17 10:31:55.082 |
8 |
Controle de produção |
Fabricação |
2021-11-17 10:31:56.638 |
9 |
Recursos Humanos |
Executivo Geral e Administração |
2021-11-17 10:31:57.507 |
10 |
Finance |
Executivo Geral e Administração |
2021-11-17 10:31:58.473 |
11 |
Serviços de informação |
Executivo Geral e Administração |
2021-11-17 10:34:35.200 |
12 |
Controle de documentos |
Garantia de Qualidade |
2021-11-17 10:34:35.741 |
13 |
Garantia de Qualidade |
Garantia de Qualidade |
2021-11-17 10:34:36.277 |
14 |
Instalações e manutenção |
Executivo Geral e Administração |
2021-11-17 10:34:36.832 |
15 |
Expedição e recebimento |
Gerenciamento de Inventário |
2021-11-17 10:34:37.373 |
16 |
Executivo |
Executivo Geral e Administração |
2021-11-17 10:34:37.918 |
17 |
Privacidade |
Executivo Geral e Administração |
2021-11-17 10:46:43.345 |
Execução de variável local e uso de parâmetros¶
Um caso de uso comum para a instrução EXECUTE é quando são necessárias instruções SQL dinâmicas. Nesses casos, em vez de executar um literal de cadeia de caracteres, a instrução pode ser construída dinamicamente e atribuída a uma variável local, que será então executada. Um conjunto de argumentos pode ser enviado para o procedimento armazenado chamado para construir o comando dinâmico SQL.
No exemplo a seguir, é criado um procedimento armazenado SetNewPrice simples, que usa a instrução EXECUTE para definir um novo preço de produto com base nos argumentos enviados pelo chamador. Por fim, é realizado um SELECT para confirmar o novo preço do produto.
Transact-SQL¶
Resultado¶
ListPrice |
|---|
34.9900 |
Script Snowflake¶
Resultado¶
LISTPRICE |
|---|
34.9900 |
Problemas conhecidos¶
Uso de códigos de retorno¶
A sintaxe do Transact-SQL EXECUTE contém o argumento opcional @return_status, que permite criar uma variável escalar para armazenar o status de retorno de uma função definida pelo usuário com valor escalar.
Ele também pode ser usado em procedimentos armazenados, embora o status de retorno seja limitado ao tipo de dados inteiro.
Para representar essa funcionalidade, poderíamos modificar um pouco o exemplo acima e criar uma função definida pelo usuário para calcular o preço do novo produto como uma média dos preços históricos. Em vez de passá-lo para o procedimento armazenado, poderíamos agora chamar a função CalculateAveragePrice para obter o novo preço e armazená-lo na variável de retorno para construir o SQL dinâmico.
Transact-SQL¶
Execute¶
Resultado¶
ListPrice |
|---|
34.0928 |
Script Snowflake¶
Argumentos opcionais não suportados¶
@return_status
;number
@module__name_v_ar
WITH RECOMPILE, WITH RESULT SETS NONE, WITH <definição do conjunto de resultados>
EWIs relacionados¶
SSC-EWI-0030: A instrução abaixo tem usos de SQL dinâmico.
IF¶
Referência de tradução para converter cláusulas IF..ELSE do Transact-SQL em Script Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
A cláusula IF permite que uma instrução SQL ou um bloco de instruções seja executado condicionalmente, desde que a expressão booliana seja verdadeira; caso contrário, as instruções da cláusula opcional ELSE serão executadas. O Transact-SQL também suporta a incorporação de várias cláusulas IF… ELSE caso sejam necessárias várias condições, ou a cláusula CASE também pode ser usada.
For more information, see the Transact-SQL IF…ELSE documentation.
Observação: para definir um bloco de instruções, use as palavras-chave de controle de fluxo BEGIN e END.
Amostra de padrões da origem¶
Transact-SQL¶
O código a seguir refere-se a um IF… ELSE no Transact-SQL que condiciona a variável @value para identificar se ela é menor que 5, se está entre 5 e 10 ou se tem qualquer outro valor. Como @value é inicializado como 7, a segunda condição deve ser verdadeira e o resultado deve ser 200.
IF…ELSE¶
Resultado¶
resultado |
|---|
200 |
Script Snowflake¶
Nota
Observe que, no Snowflake Scripting, a condição incorporada IF… ELSE é chamada de ELSEIF.
Além disso, a condição booliana é encapsulada entre parênteses, e a cláusula sempre termina com a expressão END IF.
Além disso, no Snowflake Scripting, não é necessário usar as palavras-chave BEGIN e END para definir um bloco de instruções, mas elas podem ser usadas se necessário.
IF…ELSE¶
Resultado¶
resultado |
|---|
200 |
Instrução IF fora de rotinas (funções e procedimentos)¶
Ao contrário do Transact-SQL, o Snowflake não executa instruções isoladas como IF…ELSE fora de rotinas como funções ou procedimentos. Para este cenário, a instrução deve ser encapsulada em um bloco anônimo, conforme mostrado no exemplo a seguir. Leia mais sobre como retornar corretamente os valores de saída na seção SELECT.
Transact-SQL¶
Script Snowflake¶
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-FDM-0020: Vários conjuntos de resultados são retornados em tabelas temporárias.
LABEL e GOTO¶
Referência de tradução para converter LABEL AND GOTO em Transact-SQL
Applies to
SQL Server
Descrição¶
O Snowflake SQL não é compatível com instruções GOTO LABEL. Atualmente, LABELS é comentado e um aviso é adicionado a todas as ocorrências.
Amostra de padrões da origem¶
Os exemplos a seguir detalham as instruções de transação BEGIN e COMMIT.
Transact-SQL¶
Instruções rotuladas¶
Snowflake SQL¶
Instruções rotuladas¶
Instrução LABEL e GOTO fora das rotinas (funções e procedimentos)¶
Transact-SQL¶
Script Snowflake¶
EWIs relacionados¶
SSC-EWI-TS0045: A instrução Labeled não é compatível com o Snowflake Scripting.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
OUTPUT PARAMETERS¶
Este artigo é sobre a transformação atual dos parâmetros de saída e como sua funcionalidade está sendo emulada.
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
An output parameter is a parameter whose value is passed out of the stored procedure, back to the calling SQL block. Since the output parameters are not supported by Snowflake Scripting, a solution has been implemented to emulate their functionality.
Amostra de padrões da origem¶
Parâmetro OUT único¶
O cenário mais básico para parâmetros OUT é quando o procedimento tem apenas um. Nesse caso, simplesmente retornamos o parâmetro OUT no final do corpo do procedimento.
O procedimento EXEC também precisa ser convertido. Para isso, é criado um CALL, os parâmetros são passados sem nenhum modificador («OUT» é removido) e, posteriormente, é feita uma atribuição para que o parâmetro seja associado ao respectivo valor resultante.
Transact-SQL¶
Script Snowflake¶
Múltiplos parâmetros OUT¶
Quando mais de um parâmetro OUT é encontrado, a cláusula RETURNS do procedimento muda para VARIANT. Isso é para acomodar o OBJECT_CONSTRUCT que será usado para armazenar os valores dos parâmetros OUT.
Além disso, uma instrução RETURN é adicionada ao final do corpo do procedimento. É aqui que o OBJECT_COSNTRUCT é criado e todos os valores de parâmetros do OUT são armazenados nele. Esse objeto será então usado pelo chamador para atribuir o valor dos parâmetros ao resultado correspondente.
Transact-SQL¶
Script Snowflake¶
Parâmetros OUT e valores de retorno¶
O Transact-SQL permite que os procedimentos tenham valores de retorno. Quando um procedimento tem um valor de retorno e parâmetro(s) OUT, segue-se uma abordagem semelhante ao cenário Múltiplos parâmetros OUT. O valor de retorno original é tratado como um parâmetro OUT seria tratado, portanto, é armazenado dentro de OBJECT_CONSTRUCT e extraído dentro do procedimento do chamador.
Transact-SQL¶
Script Snowflake¶
Consulta¶
Parâmetros de OUT para tipos de dados do cliente¶
when the output parameter is a custom type, the process is similar to a regular data type.
Transact-SQL¶
Script Snowflake¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-EWI-TS0015: o tipo de dados não é compatível com o Snowflake.
SET¶
Referência de tradução para converter a instrução SET do Transact-SQL em Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value. For more information, see the Transact-SQL SET documentation.
Há quatro casos de SET, que são os seguintes:
Amostra de padrões da origem¶
Transact-SQL¶
Caso 1¶
Caso 2¶
Resultado 1¶
Resultado |
|---|
0 |
Script Snowflake¶
Caso 1¶
Caso 2¶
Resultado 1¶
Resultado |
|---|
0 |
Instrução SET fora de rotinas (funções e procedimentos)¶
Ao contrário do Transact-SQL, o Snowflake não suporta a execução de instruções isoladas como SET fora de rotinas como funções ou procedimentos. Para esse cenário, a instrução deve ser encapsulada em um bloco anônimo, conforme mostrado nos exemplos a seguir. Essa instrução geralmente é usada depois de DECLARE STATEMENT.
Transact-SQL¶
Script Snowflake¶
Se houver um cenário com apenas instruções SET, o bloco DECLARE não será necessário. Provavelmente, esse cenário produzirá erros de tempo de execução se houver uma tentativa de definir um valor para uma variável que não foi declarada.
Transact-SQL¶
Script Snowflake¶
Problemas conhecidos¶
1. SET of a local variable with property name¶
No momento, esse tipo de conjunto não é compatível com o Snowflake Scripting.
2. SET of a local variable with mutator method¶
No momento, esse tipo de conjunto não é compatível com o Snowflake Scripting.
EWIs relacionados¶
SSC-EWI-TS0037: Os cursores do Snowflake Scripting não podem ser rolados.
SSC-EWI-0073: Revisão de equivalência funcional pendente.
SSC-FDM-TS0013: As linhas de cursor do Snowflake Scripting não podem ser modificadas.
TRY CATCH¶
Referência de tradução para a instrução TRY CATCH no Transact-SQL.
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
Implementa o tratamento de erros para o Transact SQL. Um grupo de instruções Transact-SQL pode ser incluído em um bloco TRY. Se ocorrer um erro no bloco TRY, o controle geralmente é passado para outro grupo de instruções que está incluído em um bloco CATCH.
Amostra de padrões da origem¶
O exemplo a seguir detalha a transformação para TRY CATCH dentro de procedimentos.
Transact-SQL¶
Saída¶
Snowflake SQL¶
Saída¶
Tentar capturar rotinas externas (funções e procedimentos)¶
Transact-SQL¶
Script Snowflake¶
EWIs relacionados¶
SSC-FDM-0020: Vários conjuntos de resultados são retornados em tabelas temporárias.
WHILE¶
Referência de tradução para converter a instrução While do Transact-SQL em Script Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
O comando While permite que uma instrução SQL ou um bloco de comandos seja executado repetidamente, desde que a condição especificada seja verdadeira. A execução das instruções no loop WHILE pode ser controlada de dentro do loop com as palavras-chave BREAK e CONTINUE.
For more information, see the Transact-SQL WHILE documentation.
Observação: para definir um bloco de instruções, use as palavras-chave de controle de fluxo BEGIN e END.
Amostra de padrões da origem¶
Código padrão de origem básico¶
Transact-SQL¶
O código a seguir refere-se a um While Loop no Transact-SQL que itera a variável @Iteration e controla o fluxo do loop para encerrar quando o valor de @Iteration for igual a 10.
Nota
As instruções após a palavra-chave CONTINUE não serão executadas.
While¶
Resultado¶
iteração |
|---|
10 |
Script Snowflake¶
Nota
Assim como no Transact-SQL, no Snowflake Scripting as instruções após a palavra-chave CONTINUE não serão executadas.
Observe que, no Snowflake Scripting, não é necessário usar as palavras-chave BEGIN e END para definir um bloco de instruções, mas isso pode ser usado se necessário.
While¶
Palavra-chave do loop¶
O Snowflake Scripting permite usar a palavra-chave LOOP em vez de DO e a expressão END LOOP em vez de END WHILE.
Resultado¶
Iteração |
|---|
10 |
While com padrão de origem de corpo vazio¶
Transact-SQL¶
Nota
Observe que este exemplo foi escrito quando não havia suporte para a instrução IF ELSE. As diferenças nos resultados devem desaparecer quando o suporte para a instrução for implementado.
Resultado¶
resultado |
|---|
125 |
Script Snowflake¶
Esse comando não pode ter um corpo vazio no Snowflake Scripting. Para resolver esse caso, um comando BREAK padrão é adicionado quando um corpo vazio é detectado.
Resultado¶
resultado |
|---|
1 |
Instrução WHILE fora de rotinas (funções e procedimentos)¶
Ao contrário do Transact-SQL, o Snowflake não suporta a execução de instruções isoladas como WHILE fora de rotinas como funções ou procedimentos. Para esse cenário, a instrução deve ser encapsulada em um bloco anônimo, conforme mostrado no exemplo a seguir.
Transact-SQL¶
Script Snowflake¶
EWIs relacionados¶
SSC-EWI-0073: Revisão de equivalência funcional pendente.