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
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;
$$;
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
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;
$$;
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¶
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 ]
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:
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');
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');
Caso comum¶
Transact-SQL¶
Consulta¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Resultado¶
Modelo |
Cor |
Price |
|---|---|---|
sedan |
vermelho |
10000,0000 |
Snowflake¶
Consulta¶
SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Resultado¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sedan |
vermelho |
10.000 |
TOP usando PERCENT¶
Transact-SQL¶
Consulta¶
SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
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;
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;
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;
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¶
SSC-EWI-0040: Instrução não suportada.