SnowConvert AI – SQL Server – Azure Synapse – SELECT¶
SELECT¶
Übersetzungsreferenz für SELECT-Anweisung innerhalb von Prozeduren in Transact-SQL.
Applies to
SQL Server
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¶
Einzelnes Resultset¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
Ausgabe¶
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¶
Einzelnes Resultset¶
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;
$$;
Ausgabe¶
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¶
Mehrere Resultsets¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
Ausgabe¶
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¶
Einzelnes Resultset¶
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;
$$;
Ausgabe¶
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
SQL Server
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:
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');
Allgemeiner Fall¶
Transact-SQL¶
Abfrage¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Ergebnis¶
Modell |
Farbe |
Preis (price) |
|---|---|---|
sedan |
rot |
10000.0000 |
Snowflake¶
Abfrage¶
SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Ergebnis¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sedan |
rot |
10.000 |
TOP mit PERCENT¶
Transact-SQL¶
Abfrage¶
SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Ergebnis¶
Modell |
Farbe |
Preise |
|---|---|---|
sedan |
rot |
10000.0000 |
convertible |
blau |
15000.0000 |
coupe |
grün |
20000.0000 |
Snowflake¶
Abfrage¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
Ergebnis¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sedan |
rot |
10.000 |
convertible |
blau |
15.000 |
coupe |
rot |
20.000 |
van |
blau |
8,000 |
sub |
grün |
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¶
Abfrage¶
SELECT TOP(50)PERCENT WITH TIES Model, Color, Price FROM Cars ORDER BY Price;
Ergebnis¶
Modell |
Farbe |
Preis (price) |
|---|---|---|
van |
blau |
8000.0000 |
sub |
grün |
8000.0000 |
sedan |
rot |
10000.0000 |
Snowflake¶
Abfrage¶
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;
Ergebnis¶
MODEL |
COLOR |
PRICE |
|---|---|---|
sub |
grün |
8,000 |
van |
blau |
8,000 |
sedan |
rot |
10.000 |
convertible |
blau |
15.000 |
coupe |
rot |
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.