Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELECT? (https://www.delphipraxis.net/141220-frage-zu-microsoft-transact-sql-kurs-select-vor-if-select.html)

dust258 5. Okt 2009 10:04

Datenbank: SQL-Server • Version: 2008 • Zugriff über: SQL Server Management Studio

Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELECT?
 
Hi Leute,

ich arbeite mich gerade durch den Kurs "An Introduction to Transact-SQL in Microsoft® SQL Server® 2008"

Unter "Control-of-Flow Language Elements" gibt es folgenden Beispielcode:

SQL-Code:
USE AdventureWorks;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
   UPDATE Production.Product
      SET ListPrice = ListPrice * 2
   SELECT MAX(ListPrice) FROM Production.Product
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
      BREAK
   ELSE
      CONTINUE
END

PRINT 'Too much for the market to bear';
Wie Ihr seht wird überprüft ob der Durchschnittspreis der Produkte unter $300 liegt. Außerdem bricht die if-Bedingung die Schleife ab, falls ein Preis die Marke von $500 überschreitet. Aber was soll die Zeile "SELECT MAX(ListPrice) FROM Production.Product" bewirken? Ich meine der gleiche Befehl wird doch in der IF-Anweisung abgefragt, oder?

Wie gesagt, ich will nur sicher gehen das ich das richtig verstanden habe...

mkinzler 5. Okt 2009 10:08

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Es wird der maximale Listenpreis ermittelt

Zoot 5. Okt 2009 10:34

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Zitat:

Zitat von mkinzler
Es wird der maximale Listenpreis ermittelt

Das hatte der TE wohl schon verstanden....

Jürgen Thomas 5. Okt 2009 10:50

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Genau hinschauen: einmal MAX, einmal AVG. Jürgen

Christian Seehase 5. Okt 2009 10:55

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Zitat:

Zitat von Jürgen Thomas
Genau hinschauen: ...

Wo Du's gerade sagst... ;-)

Diese Zeilen sind gemeint:

SQL-Code:
   SELECT MAX(ListPrice) FROM Production.Product
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500

dust258 5. Okt 2009 11:07

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Genau. Die Frage ist warum

SQL-Code:
SELECT MAX(ListPrice) FROM Production.Product
abgefragt wird bevor die gleiche abfrage auch in der if-Abfrage danach steht

SQL-Code:
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
Ich denke mal das die Zeile einfach nur unnötig ist, wollte aber noch einmal nachfragen, da ich bis jetzt nur in firebird programmiert habe und von MS-SQL keine Ahnung hab...

xaromz 5. Okt 2009 11:11

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Hallo,

kann es sein, dass diese "überflüssige" Abfrage einfach der Rückgabewert der Funktion ist?

Geuß
xaromz

leddl 5. Okt 2009 11:13

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Soll an dieser Stelle vielleicht einfach nur der aktuelle höchste Preis ausgegeben werden?

dust258 5. Okt 2009 11:22

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Also ist ein SELECT-Befehl in eine if-Abfrage nur temporär und um eine "echte" Änderung an der Query vorzunehmen wird zuvor ein "richtiger" SELECT Befehl ausgeführt damit die Funktion den gewünschten Rückgabewert bekommt.

Hmmm, das macht Sinn...
Ich werde es mal ausprobieren wenn ich meine Testdatenbank zusammen hab... Danke :wink:

Jürgen Thomas 5. Okt 2009 11:30

Re: Frage zu Microsoft Transact-SQL Kurs: SELECT vor if-SELE
 
Zitat:

Zitat von Christian Seehase
Zitat:

Zitat von Jürgen Thomas
Genau hinschauen: ...

Wo Du's gerade sagst... ;-)

:wall:

In Firebird kann das Ergebnis des "einsamen" SELECT in eine Variable eingetragen werden und im folgenden IF geprüft werden. So etwas sollte in Transact-SQL eigentlich auch möglich sein. Aber ob es hier darum geht?

Da ich aber das Problem nicht erkannt hatte, mich mit MS-SQL nicht auskenne und in der MSDN nichts dazu gefunden habe, halte ich mich doch lieber raus.

Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf