User Defined Type einer Funktion übergeben

BlubBlub

Neuer Benutzer
Beiträge
3
Code:
CREATE TYPE [dbo].[tableOfInts] AS TABLE (
    intValue INT NULL
);

Code:
CREATE FUNCTION [dbo].[MaxOfTable]
(
    @ints [dbo].[tableOfInts] READONLY
)
RETURNS INT
AS
BEGIN
    DECLARE @maxInt AS INT;
    SELECT @maxInt = MAX(ints);  --Fehler
    RETURN @maxInt
END;

Code:
DECLARE @ints [dbo].[tableOfInts];

INSERT INTO @ints (
    intValue
)
VALUES (1), (2), (4), (2), (3);

SELECT [dbo].[MaxOfTable] (@ints)

Hallo zusammen,

ich habe zwei Fragen, vielleicht könnt ihr mir ja helfen:

1. In meiner Funktion MaxOfTable möchte ich den maximalen Wert zurückliefern
der sich im User Defined Type tableOfInts befindet.

Diese Syntax ist wohl falsch, wie müsste es richtig lauten?
SELECT @maxInt = MAX(ints); --Fehler

2. Ist es möglich beim Funktionsaufruf innerhalb der runden Klammern den User Defined Type
tabelOfInts zu definieren und mit Werten zu belegen, in etwa so:
SELECT [dbo].[MaxOfTable] (tableOfInts(1,7,2))

In der Lösung oben definiere ich zuerst eine Variable, weise ihr Werte zu und übergebe die Variable dann als Parameter an die Funktion.
Ich möchte auf die Variable aber verzichten und direkt im Funktionsaufruf die Werte definieren und übergeben. Ist dies möglich?
Grund dafür ist, dass ich meine Funktion später wie folgt nutzen wollen würde:
Code:
SELECT
    temp1,
    temp2,
    temp3,
    temp4,
    [dbo].[MaxOfTable] ([dbo].[tableOfInts](temp1, temp2, temp3, temp4)) AS tempMax
FROM
    TestDataTable

An die Helfer bedanke ich mich schonmal im voraus.
 
Werbung:
Den Fehler in der Funktion habe ich nun gefunden und korrigiert.

Code:
ALTER FUNCTION [dbo].[MaxOfTable]
(
    @ints [dbo].[tableOfInts] READONLY
)
RETURNS INT
AS
BEGIN
    DECLARE @maxInt AS INT;
    SELECT @maxInt = MAX(intValue) FROM @ints;
    RETURN @maxInt
END;

Bleibt nur noch die zweite Frage über ob ein Aufruf wie dieser irgendwie möglich ist, ohne vorherige Definition einer Variablen:

Code:
SELECT
    temp1,
    temp2,
    temp3,
    temp4,
    [dbo].[MaxOfTable] ([dbo].[tableOfInts](temp1, temp2, temp3, temp4)) AS tempMax
FROM
    TestDataTable
 
mir scheint, Du suchst ein Äquivalent zu :

Code:
test=*# select greatest(1,2,3);
 greatest
----------
  3
(1 Zeile)

test=*# select greatest(1,2,3,2,1);
 greatest
----------
  3
(1 Zeile)

test=*# select greatest(1,2,3,2,1,5,6,7);
 greatest
----------
  7
(1 Zeile)

test=*#

aber vielleicht irre ich mich auch nur ...
 
Hi,

Danke für die Antwort. Ich verwende SQL Server 2014. Darin kann ich keine Funktion namens greatest finden.
Bezieht sich dein Code auf SQL Server oder eventuell auf Oracle?

Für das beschriebene Problem wäre greatest die Lösung gewesen, wenn die Funktion bei mir vorhanden wäre.
Generell wäre es aber trotzdem gut, wenn es eine Möglichkeit gäbe einen User Defined Type ohne vorherige Variablendeklaration
zu übergeben.
 
Werbung:
Zurück
Oben