SnowConvert : Requêtes Transact¶
SELECT¶
Applies to
[x] SQL Server
[x] 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.
Échantillons de modèles 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 ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
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 ¶
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 |
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 ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
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 ¶
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 |
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
[x] SQL Server
[x] 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 :
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');
Cas courant¶
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 utilisant 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
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¶
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
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.