Benutzer mit den meisten Antworten
Tabellenwertfunktion in Skalarwertfunktion umwandeln

Frage
-
Folgende Abfrage liefert einen einzelnen Tabelleneintrag (Wohnort zu Eingabenamen):
CREATE FUNCTION finde_Wohnort ( -- Add the parameters for the function here @name char(100) ) RETURNS TABLE AS RETURN ( -- Add the SELECT statement with parameter references here SELECT wohnort.ort from dbo.wohnort, dbo.name where dbo.name.wohnortid = wohnort.id AND name.name = @name ) GO
Folgende Situation:
Ich möchte die Rückgabe so erhalten, dass ich daraus einen char-wert erhalte, da ich mit dem besser arbeiten kann - bei dem gleichen Select-string meckert das Management Studio aber, dass das Select keinen Wert zurückgeben kann.
Wie muss ich den Quelltext umschreiben und als Skalarwertfunktion eingeben, dass ein Char zurückegeben wird?
Mein Versuch:
CREATE FUNCTION finde_Wohnort ( -- Add the parameters for the function here @name char(100) ) RETURNS char(100) AS BEGIN -- Declare the return variable here DECLARE @Result char(100) -- Add the T-SQL statements to compute the return value here SELECT wohnort.ort from dbo.wohnort, dbo.name where dbo.name.wohnortid = wohnort.id AND name.name = @name --@Result = @name -- Return the result of the function RETURN @Result END GO
Hier kommt für
SELECT wohnort.ort
der Fehler:
Meldung 444, Ebene 16, Status 2, Prozedur finde_Wohnort, Zeile 18
In eine Funktion eingeschlossene SELECT-Anweisungen können keine Daten an einen Client zurückgeben.- Bearbeitet paradonym Mittwoch, 26. März 2014 09:59
Antworten
-
Was Andreas Dir mitteilen wollte ist, das es so aussehen müsste:
CREATE FUNCTION finde_Wohnort ( -- Add the parameters for the function here @name char(100) ) RETURNS char(100) AS BEGIN -- Declare the return variable here DECLARE @Result char(100) -- Add the T-SQL statements to compute the return value here SELECT @Result = wohnort.ort from dbo.wohnort, dbo.name where dbo.name.wohnortid = wohnort.id AND name.name = @name --@Result = @name -- Return the result of the function RETURN @Result END GO
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert paradonym Mittwoch, 26. März 2014 12:05
-
...Meldung 444, Ebene 16, Status 2, Prozedur finde_Wohnort, Zeile 18
In eine Funktion eingeschlossene SELECT-Anweisungen können keine Daten an einen Client zurückgeben. ...
Dieser Fehler ist genau das Problem.In der Dokumentation wäre das der Punkt:
"SELECT-Anweisungen, die Auswahllisten mit Ausdrücken enthalten, die lokalen Variablen Werte zuweisen."
- aber eben kein direktes Select. Das geht nur in Prozeduren.
Du musst deine Variable "@Return" auch füllen ;-)
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com
- Bearbeitet Andreas.WolterMicrosoft employee Mittwoch, 26. März 2014 11:25
- Als Antwort markiert paradonym Mittwoch, 26. März 2014 12:05
Alle Antworten
-
Syntaxbeispiele findest Du hier: http://msdn.microsoft.com/de-de/library/ms186755.aspx
Generell kann ich die Verwendung von Skalarwertfunktionen aber nicht empfehlen.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
...Meldung 444, Ebene 16, Status 2, Prozedur finde_Wohnort, Zeile 18
In eine Funktion eingeschlossene SELECT-Anweisungen können keine Daten an einen Client zurückgeben. ...
Dieser Fehler ist genau das Problem.In der Dokumentation wäre das der Punkt:
"SELECT-Anweisungen, die Auswahllisten mit Ausdrücken enthalten, die lokalen Variablen Werte zuweisen."
- aber eben kein direktes Select. Das geht nur in Prozeduren.
Du musst deine Variable "@Return" auch füllen ;-)
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com
- Bearbeitet Andreas.WolterMicrosoft employee Mittwoch, 26. März 2014 11:25
- Als Antwort markiert paradonym Mittwoch, 26. März 2014 12:05
-
Was Andreas Dir mitteilen wollte ist, das es so aussehen müsste:
CREATE FUNCTION finde_Wohnort ( -- Add the parameters for the function here @name char(100) ) RETURNS char(100) AS BEGIN -- Declare the return variable here DECLARE @Result char(100) -- Add the T-SQL statements to compute the return value here SELECT @Result = wohnort.ort from dbo.wohnort, dbo.name where dbo.name.wohnortid = wohnort.id AND name.name = @name --@Result = @name -- Return the result of the function RETURN @Result END GO
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert paradonym Mittwoch, 26. März 2014 12:05