SnowConvert AI - Servidor SQL - Azure Synapse - SELECT

SELECT

Referência de tradução da instrução SELECT nos procedimentos em Transac-SQL.

Applies to
  • SQL Server

  • 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 da origem

O exemplo a seguir detalha a transformação quando há apenas uma instrução SELECT no procedimento.

Transact-SQL

Conjunto de resultados único
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
        SELECT * from AdventureWorks.HumanResources.Department;
END
Copy
Saída

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
Conjunto de resultados único
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;
$$;
Copy
Saída

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
Conjunto de resultados múltiplo
 CREATE PROCEDURE SOMEPROC()
AS
BEGIN
        SELECT * from AdventureWorks.HumanResources.Department;
        SELECT * from AdventureWorks.HumanResources.Shift;
END
Copy
Saída

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
Conjunto de resultados único
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;
$$;
Copy
Saída

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

  1. Os resultados da consulta devem ser acessados usando IDs retornados pelo procedimento armazenado

TOP

Applies to
  • SQL Server

  • 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 ]
Copy

Nota

Para obter mais informações sobre os argumentos de TOP, consulte a documentação do Transact-SQL TOP.

Sintaxe no Snowflake
 TOP <n> 
Copy

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:

Transact-SQL

 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');
Copy
Snowflake
 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');
Copy

Caso comum

Transact-SQL
Consulta
 SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Copy
Resultado

Modelo

Cor

Price

sedan

vermelho

10000,0000

Snowflake
Consulta
 SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Copy
Resultado

MODEL

COLOR

PRICE

sedan

vermelho

10.000

TOP usando PERCENT

Transact-SQL
Consulta
 SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Copy
Resultado

Modelo

Cor

Preços

sedan

vermelho

10000,0000

conversível

azul

15000,0000

cupê

verde

20000,0000

Snowflake
Consulta
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
Copy
Resultado

MODEL

COLOR

PRICE

sedan

vermelho

10.000

conversível

azul

15,000

cupê

vermelho

20.000

caminhonete

azul

8,000

sub

verde

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
Consulta
 SELECT TOP(50)PERCENT WITH TIES Model, Color, Price FROM Cars ORDER BY Price;
Copy
Resultado

Modelo

Cor

Price

caminhonete

azul

8000,0000

sub

verde

8000,0000

sedan

vermelho

10000,0000

Snowflake
Consulta
 SELECT
 TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT AND WITH TIES' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
  Model,
  Color,
  Price
 FROM
  Cars
 ORDER BY Price;
Copy
Resultado

MODEL

COLOR

PRICE

sub

verde

8,000

caminhonete

azul

8,000

sedan

vermelho

10.000

conversível

azul

15,000

cupê

vermelho

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

  1. SSC-EWI-0040: Instrução não suportada.