SnowConvert: Transact Abfragen¶
SELECT¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
Bemerkung
Mehrere Resultsets werden in temporären Tabellen zurückgegeben
Beschreibung¶
Snowflake SQL unterstützt die Rückgabe von Tabellen in als Rückgabetyp gespeicherte Prozeduren, aber im Gegensatz zu Transact-SQL unterstützt Snowflake nicht die Rückgabe mehrerer Resultsets in derselben Prozedur. Bei diesem Szenario werden alle Abfrage-IDs in einer temporären Tabelle gespeichert und als Array zurückgegeben.
Beispielhafte Quellcode-Muster ¶
Das folgende Beispiel beschreibt die Transformation, wenn es nur eine SELECT-Anweisung in der Prozedur gibt.
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
DepartmentID |
Name |
GroupName |
---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and 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 |
Name |
GroupName |
---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and Administration |
Das folgende Beispiel beschreibt die Transformation, wenn es viele SELECT-Anweisungen in der Prozedur gibt.
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
DepartmentID |
Name |
GroupName |
---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and Administration |
ShiftID |
Name |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
Tag |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00,000 |
2 |
Abend |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00,000 |
3 |
Nacht |
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 |
Name |
GroupName |
---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and Administration |
ShiftID |
Name |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
Tag |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00,000 |
2 |
Abend |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00,000 |
3 |
Nacht |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00,000 |
Bekannte Probleme¶
Auf die Abfrageergebnisse sollten Sie über die IDs zugreifen, die von der gespeicherten Prozedur zurückgegeben wird
TOP¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
Beschreibung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Schränkt die in einem Resultset der Abfrage zurückgegebenen Zeilen auf eine bestimmte Anzahl von Zeilen oder einen bestimmten Prozentsatz von Zeilen ein. Wenn Sie TOP
mit der ORDER BY
-Klausel verwenden, ist das Resultset auf die erste N Anzahl der geordneten Zeilen beschränkt. Andernfalls gibt TOP
die erste _ N _ Anzahl von Zeilen in einer undefinierten Reihenfolge zurück. Verwenden Sie diese Klausel, um die Anzahl der Zeilen anzugeben, die von einer SELECT
-Anweisung zurückgegeben werden. Oder verwenden Sie TOP
, um die Zeilen anzugeben, die von einer INSERT
-, UPDATE
-, MERGE
- oder DELETE
-Anweisung betroffen sind. (Transact-SQL TOP-Dokumentation)
Syntax in Transact-SQL¶
TOP (expression) [PERCENT] [ WITH TIES ]
Bemerkung
Weitere Informationen zu den TOP
-Argumenten finden Sie in der Transact-SQL TOP-Dokumentation.
Syntax in Snowflake¶
TOP <n>
Bemerkung
Weitere Informationen über TOP
Argumente finden Sie in der TOP-Dokumentation von Snowflake.
Beispielhafte Quellcode-Muster¶
Um die folgenden Beispiele korrekt auszuführen, ist es erforderlich, die folgende CREATE TABLE
-Anweisung auszuführen:
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');
Allgemeiner Fall¶
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 mit 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
Warnung
Da das Argument PERCENT
von Snowflake nicht unterstützt wird, wird es aus der TOP
-Klausel entfernt. Deshalb ist das Ergebnis der Ausführung der Abfrage in Snowflake nicht gleichwertig mit 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
Warnung
Da das Argument WITH TIES
von Snowflake nicht unterstützt wird, wird es aus der TOP
-Klausel entfernt. Deshalb ist das Ergebnis der Ausführung der Abfrage in Snowflake nicht gleichwertig mit Transact-SQL.
Bekannte Probleme¶
1. PERCENT argument is not supported by Snowflake¶
Da das PERCENT
-Argument von Snowflake nicht unterstützt wird, wird es aus der TOP
-Klausel entfernt und eine Warnung hinzugefügt. Bei den Ergebnissen kann es zu Funktionsäquivalenzfehlern kommen.
2. WITH TIES argument is not supported by Snowflake¶
Da das WITH TIES
-Argument von Snowflake nicht unterstützt wird, wird es aus der TOP
-Klausel entfernt und eine Warnung hinzugefügt. Bei den Ergebnissen kann es zu Funktionsäquivalenzfehlern kommen.
Zugehörige EWIs¶
[SSC-EWI-0040](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0040): Anweisung wird nicht unterstützt.