SnowConvert AI - Serveur SQL-Azure Synapse - SELECT¶
SELECT¶
Référence de traduction pour l’instruction SELECT à l’intérieur des procédures dans Transact-SQL.
Applies to
SQL Server
Azure Synapse Analytics
Note
Les jeux de résultats multiples sont renvoyés dans des tables temporaires
Description¶
Snowflake SQL prend en charge le retour des tables comme type de retour pour les procédures stockées, mais contrairement à Transact-SQL, Snowflake ne prend pas en charge le retour de plusieurs jeux de résultats dans la même procédure. Pour ce scénario, tous les IDs de requête sont stockés dans une table temporaire et renvoyés sous forme de tableau.
Modèles d’échantillons de sources¶
L’exemple suivant détaille la transformation lorsqu’il n’y a qu’une seule instruction SELECT dans la procédure.
Transact-SQL¶
Jeu de résultats unique¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
Sortie¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
Snowflake SQL¶
Jeu de résultats unique¶
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;
$$;
Sortie¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
L’exemple suivant détaille la transformation lorsqu’il y a de nombreuses instructions SELECT dans la procédure.
Transact-SQL¶
Jeu de résultats multiples¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
Sortie¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
ShiftID |
Nom |
StartTime |
EndTime |
ModifiedDate |
|---|---|---|---|---|
1 |
Jour |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
Soirée |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
Nuit |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
Snowflake SQL¶
Jeu de résultats unique¶
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;
$$;
Sortie¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
ShiftID |
Nom |
StartTime |
EndTime |
ModifiedDate |
|---|---|---|---|---|
1 |
Jour |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
Soirée |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
Nuit |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
Problèmes connus¶
Les résultats de la requête doivent être accessibles avec les IDs renvoyés par la procédure stockée
TOP¶
Applies to
SQL Server
Azure Synapse Analytics
Description¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Limite les lignes renvoyées dans un jeu de résultats de requête à un nombre de lignes ou à un pourcentage de lignes spécifié. Lorsque vous utilisez TOP avec la clause ORDER BY, le jeu de résultats est limité au premier N nombre de lignes ordonnées. Sinon, TOP renvoie le premier _ N _ nombre de lignes dans un ordre indéfini. Utilisez cette clause pour spécifier le nombre de lignes renvoyées par une instruction SELECT. Vous pouvez également utiliser TOP pour spécifier les lignes affectées par une instruction INSERT, UPDATE, MERGE ou DELETE. (Documentation sur Transact-SQL TOP)
Syntaxe dans Transact-SQL¶
TOP (expression) [PERCENT] [ WITH TIES ]
Note
Pour obtenir plus d’informations sur les arguments de TOP, veuillez consulter la documentation sur Transact-SQL TOP.
Syntaxe dans Snowflake¶
TOP <n>
Note
Pour obtenir plus d’informations sur les arguments de TOP, veuillez consulter la documentation sur Snowflake TOP.
Modèles d’échantillons de sources¶
Pour exécuter correctement les échantillons suivants, il est nécessaire d’exécuter l’instruction CREATE TABLE suivante :
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');
Cas courant¶
Transact-SQL¶
Requête¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Résultat¶
Modèle |
Couleur |
Prix |
|---|---|---|
sedan |
red |
10000.0000 |
Snowflake¶
Requête¶
SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Résultat¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sedan |
red |
10,000 |
TOP utilisant PERCENT¶
Transact-SQL¶
Requête¶
SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Résultat¶
Modèle |
Couleur |
Prices |
|---|---|---|
sedan |
red |
10000.0000 |
convertible |
blue |
15000.0000 |
coupe |
green |
20000.0000 |
Snowflake¶
Requête¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
Résultat¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sedan |
red |
10,000 |
convertible |
blue |
15,000 |
coupe |
red |
20,000 |
van |
blue |
8,000 |
sub |
green |
8,000 |
Avertissement
Comme l’argument PERCENT n’est pas pris en charge par Snowflake, il est supprimé de la clause TOP, c’est pourquoi le résultat de l’exécution de la requête dans Snowflake n’est pas équivalent à Transact-SQL.
TOP WITH TIES¶
Transact-SQL¶
Requête¶
SELECT TOP(50)PERCENT WITH TIES Model, Color, Price FROM Cars ORDER BY Price;
Résultat¶
Modèle |
Couleur |
Prix |
|---|---|---|
van |
blue |
8000.0000 |
sub |
green |
8000.0000 |
sedan |
red |
10000.0000 |
Snowflake¶
Requête¶
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;
Résultat¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sub |
green |
8,000 |
van |
blue |
8,000 |
sedan |
red |
10,000 |
convertible |
blue |
15,000 |
coupe |
red |
20,000 |
Avertissement
Comme l’argument WITH TIES n’est pas pris en charge par Snowflake, il est supprimé de la clause TOP, c’est pourquoi le résultat de l’exécution de la requête dans Snowflake n’est pas équivalent à Transact-SQL.
Problèmes connus¶
1. PERCENT argument is not supported by Snowflake¶
L’argument PERCENT n’étant pas pris en charge par Snowflake, il est supprimé de la clause TOP et un avertissement est ajouté. Des erreurs d’équivalence fonctionnelle peuvent survenir dans les résultats.
2. WITH TIES argument is not supported by Snowflake¶
L’argument WITH TIES n’étant pas pris en charge par Snowflake, il est supprimé de la clause TOP et un avertissement est ajouté. Des erreurs d’équivalence fonctionnelle peuvent survenir dans les résultats.
EWIs connexes¶
SSC-EWI-0040 : Instruction non prise en charge.