Hi,
Irgendwie sieht mir das nach einer Stringverknüpfung aus, wie auch immer das in Perl geht.
also, ich habe zum Beispiel sowas (bitte auf die ---MARKE--- schaun)
CREATE
procedure
BIZ_DATENZUGRIFFE
@Session_GUID uniqueidentifier,
@Sortierung nvarchar (32)
/*
Gibt eine Liste der Datenzugriffe zurueck, wobei die Sortierungen 'alphabetisch', 'nach_Laufzeit' und
'nach_DS-Laufzeit' unterstuetzt werden
--
Autor: x
erstellt am: 17.02.2003
letzte Aenderung: 12.09.2003
--
24.02.2003 Pruefung auf 'Benutzer_GUID' und 'Recht_Name', und Logging erfolgt nun ueber
'SET_DATENZUGRIFF'
11.03.2003 Rechteabfrage auf "IsAdmin/IsUser" umgestellt
23.07.2003 Datenzugriffslogging nun mit 'SET_DATENZUGRIFF_START' und 'SET_DATENZUGRIFF_END'
09.09.2003 drei Filteroptionen implementiert
*/
as
begin
--
declare
@Benutzer_GUID uniqueidentifier,
@Recht_Name nvarchar (16),
@Datenzugriff_GUID uniqueidentifier
exec
SET_DATENZUGRIFF_START
@Session_GUID = @Session_GUID,
@Benutzer_GUID = @Benutzer_GUID output,
@Recht_Name = @Recht_Name output,
@Datenzugriff_SP = 'BIZ_DATENZUGRIFFE',
@Datenzugriff_GUID = @Datenzugriff_GUID output
--
if (dbo.IsAdmin(@Recht_Name) = 0)
begin
--
select
*
from
(
select
'benutzerspezifisch' as Zugriff,
Datenzugriff_SP,
count(*) as Anzahl,
min(Datenzugriff_Creation_Date) as Zuerst,
max(Datenzugriff_Creation_Date) as Zuletzt,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) as Laufzeit,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) / count(*) as [DS-Laufzeit]
from
DATENZUGRIFFE
where
(Datenzugriff_Benutzer_GUID = @Benutzer_GUID)
group by
Datenzugriff_SP
union
select
'total' as Zugriff,
Datenzugriff_SP,
count(*) as Anzahl,
min(Datenzugriff_Creation_Date) as Zuerst,
max(Datenzugriff_Creation_Date) as Zuletzt,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) as Laufzeit,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) / count(*) as [DS-Laufzeit]
from
DATENZUGRIFFE
group by
Datenzugriff_SP
) [Dummy]
order by
--
-- ---MARKE--- HIER SCHAUEN BITTE:
--
case @Sortierung
when 'alphabetisch' then Datenzugriff_SP
when 'nach_Laufzeit' then cast(2000000000 - cast(Laufzeit as int) as nvarchar)
when 'nach_DS-Laufzeit' then cast(2000000000 - cast([DS-Laufzeit] as int) as nvarchar)
end
end
else if (dbo.IsUser(@Recht_Name) = 0)
begin
--
select
*
from
(
select
'benutzerspezifisch' as Zugriff,
Datenzugriff_SP,
count(*) as Anzahl,
min(Datenzugriff_Creation_Date) as Zuerst,
max(Datenzugriff_Creation_Date) as Zuletzt,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) as Laufzeit,
sum(datediff(millisecond,Datenzugriff_Creation_Date,Datenzugriff_Executed_Date)) / count(*) as [DS-Laufzeit]
from
DATENZUGRIFFE
where
(Datenzugriff_Benutzer_GUID = @Benutzer_GUID)
group by
Datenzugriff_SP
) [Dummy]
order by
case @Sortierung
when 'alphabetisch' then Datenzugriff_SP
when 'nach_Laufzeit' then cast(2000000000 - cast(Laufzeit as int) as nvarchar)
when 'nach_DS-Laufzeit' then cast(2000000000 - cast([DS-Laufzeit] as int) as nvarchar)
end
end
--
exec
SET_DATENZUGRIFF_END
@Datenzugriff_GUID = @Datenzugriff_GUID
--
end
GO
Und mit dem "CASE-Krempel" bin ich ungluecklich. Vorher hatte ich aber 3 Queries mit identischer Datensatzmenge. Koennte noch zig weitere Beispiele geben. :~)
Gruss,
Lude