SnowConvert: Consultas Transact¶
SELECT¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
Nota
Vários conjuntos de resultados são retornados em tabelas temporárias
Descrição¶
O Snowflake SQL suporta o retorno de tabelas como um tipo de retorno para procedimentos armazenados, mas, diferentemente do Transact SQL, o Snowflake não suporta o retorno de vários conjuntos de resultados no mesmo procedimento. Nesse cenário, todas as IDs de consulta são armazenadas em uma tabela temporária e retornadas como uma matriz.
Amostra de padrões de origem ¶
O exemplo a seguir detalha a transformação quando há apenas uma instrução SELECT no procedimento.
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
DepartmentID |
Nome |
GroupName |
---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
3 |
Vendas |
Vendas e marketing |
4 |
Marketing |
Vendas e marketing |
5 |
Compras |
Gerenciamento de Inventário |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
7 |
Produção |
Fabricação |
8 |
Controle de produção |
Fabricação |
9 |
Recursos Humanos |
Executivo Geral e Administração |
10 |
Finance |
Executivo Geral e Administração |
11 |
Serviços de informação |
Executivo Geral e Administração |
12 |
Controle de documentos |
Garantia de Qualidade |
13 |
Garantia de Qualidade |
Garantia de Qualidade |
14 |
Instalações e manutenção |
Executivo Geral e Administração |
15 |
Expedição e recebimento |
Gerenciamento de Inventário |
16 |
Executivo |
Executivo Geral e Administração |
Snowflake SQL ¶
CREATE OR REPLACE PROCEDURE SOMEPROC ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
from
AdventureWorks.HumanResources.Department);
RETURN TABLE(ProcedureResultSet);
END;
$$;
DepartmentID |
Nome |
GroupName |
---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
3 |
Vendas |
Vendas e marketing |
4 |
Marketing |
Vendas e marketing |
5 |
Compras |
Gerenciamento de Inventário |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
7 |
Produção |
Fabricação |
8 |
Controle de produção |
Fabricação |
9 |
Recursos Humanos |
Executivo Geral e Administração |
10 |
Finance |
Executivo Geral e Administração |
11 |
Serviços de informação |
Executivo Geral e Administração |
12 |
Controle de documentos |
Garantia de Qualidade |
13 |
Garantia de Qualidade |
Garantia de Qualidade |
14 |
Instalações e manutenção |
Executivo Geral e Administração |
15 |
Expedição e recebimento |
Gerenciamento de Inventário |
16 |
Executivo |
Executivo Geral e Administração |
O exemplo a seguir detalha a transformação quando há muitas instruções SELECT no procedimento.
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
DepartmentID |
Nome |
GroupName |
---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
3 |
Vendas |
Vendas e marketing |
4 |
Marketing |
Vendas e marketing |
5 |
Compras |
Gerenciamento de Inventário |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
7 |
Produção |
Fabricação |
8 |
Controle de produção |
Fabricação |
9 |
Recursos Humanos |
Executivo Geral e Administração |
10 |
Finance |
Executivo Geral e Administração |
11 |
Serviços de informação |
Executivo Geral e Administração |
12 |
Controle de documentos |
Garantia de Qualidade |
13 |
Garantia de Qualidade |
Garantia de Qualidade |
14 |
Instalações e manutenção |
Executivo Geral e Administração |
15 |
Expedição e recebimento |
Gerenciamento de Inventário |
16 |
Executivo |
Executivo Geral e Administração |
ShiftID |
Nome |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
Day |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
Evening |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
Night |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
Snowflake SQL ¶
CREATE OR REPLACE PROCEDURE SOMEPROC ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
*
from
AdventureWorks.HumanResources.Department;
return_arr := array_append(return_arr, :ProcedureResultSet1);
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
*
from
AdventureWorks.HumanResources.Shift;
return_arr := array_append(return_arr, :ProcedureResultSet2);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
DepartmentID |
Nome |
GroupName |
---|---|---|
1 |
Engenharia |
Pesquisa e desenvolvimento |
2 |
Projeto de ferramentas |
Pesquisa e desenvolvimento |
3 |
Vendas |
Vendas e marketing |
4 |
Marketing |
Vendas e marketing |
5 |
Compras |
Gerenciamento de Inventário |
6 |
Pesquisa e desenvolvimento |
Pesquisa e desenvolvimento |
7 |
Produção |
Fabricação |
8 |
Controle de produção |
Fabricação |
9 |
Recursos Humanos |
Executivo Geral e Administração |
10 |
Finance |
Executivo Geral e Administração |
11 |
Serviços de informação |
Executivo Geral e Administração |
12 |
Controle de documentos |
Garantia de Qualidade |
13 |
Garantia de Qualidade |
Garantia de Qualidade |
14 |
Instalações e manutenção |
Executivo Geral e Administração |
15 |
Expedição e recebimento |
Gerenciamento de Inventário |
16 |
Executivo |
Executivo Geral e Administração |
ShiftID |
Nome |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
Day |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
Evening |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
Night |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
Problemas conhecidos¶
Os resultados da consulta devem ser acessados usando IDs retornados pelo procedimento armazenado
TOP¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
Descrição¶
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Limita as linhas retornadas em um conjunto de resultados de consulta a um número especificado de linhas ou a uma porcentagem de linhas. Quando você usa TOP
com a cláusula ORDER BY
, o conjunto de resultados é limitado ao primeiro número N de linhas ordenadas. Caso contrário, TOP
retorna o primeiro _ N _ número de linhas em uma ordem indefinida. Use essa cláusula para especificar o número de linhas retornadas de uma instrução SELECT
. Ou use TOP
para especificar as linhas afetadas por uma instrução INSERT
, UPDATE
, MERGE
ou DELETE
. (Documentação do Transact-SQL TOP)
Sintaxe no Transact-SQL¶
TOP (expression) [PERCENT] [ WITH TIES ]
Nota
Para obter mais informações sobre os argumentos de TOP
, consulte a documentação do Transact-SQL TOP.
Sintaxe no Snowflake¶
TOP <n>
Nota
Para obter mais informações sobre os argumentos de TOP
, consulte a documentação do Snowflake TOP.
Amostra de padrões da origem¶
Para executar corretamente os exemplos a seguir, é necessário executar a próxima instrução CREATE TABLE
:
CREATE TABLE Cars(
Model VARCHAR(15),
Price MONEY,
Color VARCHAR(10)
);
INSERT Cars VALUES ('sedan', 10000, 'red'),
('convertible', 15000, 'blue'),
('coupe', 20000, 'red'),
('van', 8000, 'blue'),
('sub', 8000, 'green');
CREATE OR REPLACE TABLE Cars (
Model VARCHAR(15),
Price NUMBER(38, 4),
Color VARCHAR(10)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
INSERT INTO Cars VALUES ('sedan', 10000, 'red'),
('convertible', 15000, 'blue'),
('coupe', 20000, 'red'),
('van', 8000, 'blue'),
('sub', 8000, 'green');
Caso comum¶
Transact-SQL¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Model | Color | Price
--------------------------
sedan | red | 10000.0000
Snowflake¶
SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
MODEL COLOR PRICE
sedan red 10,000
TOP usando PERCENT¶
Transact-SQL¶
SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Model | Color | Prices
-----------------------------------
sedan | red | 10000.0000
convertible | blue | 15000.0000
coupe | green | 20000.0000
Snowflake¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
MODEL COLOR PRICE
sedan red 10,000
convertible blue 15,000
coupe red 20,000
van blue 8,000
sub green 8,000
Aviso
Como o argumento PERCENT
não é suportado pelo Snowflake, ele está sendo removido da cláusula TOP
, por isso o resultado da execução da consulta no Snowflake não é equivalente ao Transact-SQL.
TOP WITH TIES¶
Transact-SQL¶
SELECT TOP(50)PERCENT WITH TIES Model, Color, Price FROM Cars ORDER BY Price;
Model | Color | Price
-------------------------------
van | blue | 8000.0000
sub | green | 8000.0000
sedan | red | 10000.0000
Snowflake¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars
ORDER BY Price;
MODEL COLOR PRICE
sub green 8,000
van blue 8,000
sedan red 10,000
convertible blue 15,000
coupe red 20,000
Aviso
Como o argumento WITH TIES
não é suportado pelo Snowflake, ele está sendo removido da cláusula TOP
, por isso o resultado da execução da consulta no Snowflake não é equivalente ao Transact-SQL.
Problemas conhecidos¶
1. PERCENT argument is not supported by Snowflake¶
Como o argumento PERCENT
não é suportado pelo Snowflake, ele está sendo removido da cláusula TOP
e um aviso está sendo adicionado. Podem ocorrer incompatibilidades de equivalência funcional nos resultados.
2. WITH TIES argument is not supported by Snowflake¶
Como o argumento WITH TIES
não é suportado pelo Snowflake, ele está sendo removido da cláusula TOP
e um aviso está sendo adicionado. Podem ocorrer incompatibilidades de equivalência funcional nos resultados.
EWIs relacionados¶
SSC-EWI-0040: Instrução não suportada.