UDF liefert unerwartetes Ergebnis

29/03/2010 - 16:21 von Dieter Liessmann | Report spam
Hi,

auf einem 2005er SQL-Server gibt es eine UDF mit drei Parametern, die als
Ergebnis eine Tabelle mit 4 Spalten und einer Zeile liefert.

Im konkreten Testfall gibt mir die UDF vier mal 1 zurück.

Zum Debuggen kopiere ich den Code der UDF in ein neues Fenster, nehme den
Kopfteil raus und mache eine Declare und Set für die drei Parameter.
Das Ergebnis im Debugging ist vier mal "Null"!

Das ganze im SQL-Server Management studio direkt auf dem Server mit SP3.

Hier die UDF:
-
CREATE Function [dbo].[Fct_GetRightsStandort] (@AdrID int, @FormName
varchar(255), @StandortID int)
Returns Table
AS
Return
(
SELECT
max(tmpQry1.Le) as lesen,
max(tmpQry1.Be) as bearbeiten,
max(tmpQry1.Lo) as loeschen,
max(tmpQry1.Ne) as neu
FROM
(
SELECT
cast(lesen as int) as Le,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE bearbeiten
END
as int) as Be,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE loeschen
END
as int) as Lo,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE neu
END
as int) as Ne
FROM
Mitarbeiter_StandortBerechtigungen_Standort INNER JOIN
Mitarbeiter_StandortBerechtigungen
ON
Mitarbeiter_StandortBerechtigungen_Standort.MBS_ID=Mitarbeiter_StandortBerechtigungen.MBS_ID
INNER JOIN Berechtigungen_ArtenStandort ON
Berechtigungen_ArtenStandort.BerArtStandort_ID =
Mitarbeiter_StandortBerechtigungen.BerArtStandort_ID
WHERE
Mitarbeiter_StandortBerechtigungen.Adr_ID = @AdrID
AND
Mitarbeiter_StandortBerechtigungen.FormName = @FormName
AND
Mitarbeiter_StandortBerechtigungen_Standort.Standort_id = @StandortID

UNION ALL

SELECT
cast(lesen as int) as Le,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE bearbeiten
END
as int) as Be,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE loeschen
END
as int) as Lo,
cast(
CASE
WHEN Art = 'Einzel' AND lesen = 1
THEN 1
ELSE neu
END
as int) as Ne
FROM
Gruppe_Mitarbeiter INNER JOIN
(Gruppe_StandortBerechtigungen INNER JOIN
Gruppe_StandortBerechtigungen_Standort
ON Gruppe_StandortBerechtigungen.GruppeStB_ID =
Gruppe_StandortBerechtigungen_Standort.GruppeStB_ID)
ON Gruppe_Mitarbeiter.Gruppe_id = Gruppe_StandortBerechtigungen.Gruppe_id
INNER JOIN Berechtigungen_ArtenStandort ON
Berechtigungen_ArtenStandort.BerArtStandort_ID =
Gruppe_StandortBerechtigungen.BerArtStandort_ID
WHERE
Gruppe_Mitarbeiter.Mitarbeiter_ID = Mitarbeiter_ID
AND
Gruppe_StandortBerechtigungen.FormName = @FormName
AND
Gruppe_StandortBerechtigungen_Standort.Standort_id = @StandortID
) as tmpQry1
)


So long
Dieter
 

Lesen sie die antworten

#1 Stefan Hoffmann
29/03/2010 - 16:30 | Warnen spam
hallo Dieter,

On 29.03.2010 16:21, Dieter Liessmann wrote:
Im konkreten Testfall gibt mir die UDF vier mal 1 zurück.

Zum Debuggen kopiere ich den Code der UDF in ein neues Fenster, nehme
den Kopfteil raus und mache eine Declare und Set für die drei Parameter.
Das Ergebnis im Debugging ist vier mal "Null"!


Was nu? 1 oder Null?

Rufts du die Funktion auch mit den gleichen Parametern auf? GGf. mit dem
Profiler nachsehen, ob dem so ist.



mfG

Ähnliche fragen