Forums Neueste Beiträge
 

Gespeicherte Prozedur mit Unterabfragen

15/04/2009 - 17:08 von Patrick Pohlmann | Report spam
Hallo Zusammen,

für eien Webanwendung benötige ich eine gespeichrtet Prozedur, die
eigentlich auf zwei Unterabfragen basiert. Jetzt weis ich aber nicht, wie
ich soetwas hinbekomme.

Ich habe mal folgenden - nicht richtigen Ansatz gewàhlt. Kann mir jemand
sagen wie ich das richtig mache?

Schon mal vielen Dank im Voraus.

Viele Grüße

Patrick!

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[RS_Auswertung_AktVertràge]
@PersID nvarchar(50), @Stichtag datetime

AS
BEGIN
SET NOCOUNT ON;

DECLARE @BERECHTIGUNGEN cursor
DECLARE @StartDatum datetime
DECLARE @EndDatum datetime
DECLARE @str nvarchar(1024)
DECLARE @strAktVert nvarchar(1024)
DECLARE @strAktNutzer nvarchar(1024)
DECLARE @KundeNr int
DECLARE @KMitarb nvarchar(50)
DECLARE @Berechtigung Int


set @StartDatum = (SELECT
Dateadd(dd,+1,Dateadd(dd,-day(@Stichtag),@stichtag)))
set @EndDatum = (SELECT Dateadd(dd,-1,Dateadd(m,+1,@StartDatum)))
set @KundeNr = (SELECT KundeNr FROM OS_Kundenmitarbeiter WHERE
PersID=@PersID)

set @strAktVert = 'SELECT V.VertragNr, V.Vertragsnummer, VD.Rufnummer
FROM dbo.OS_Vertràge V LEFT OUTER JOIN
dbo.OS_MOB_Vertragsdaten VD ON V.VertragNr =
VD.VertragNr
WHERE (V.aufgelöst IS NULL OR
V.aufgelöst > CONVERT(DATETIME, '@EndDatum', 102))
AND (V.SubjektNr = '@KundeNr') AND (V.Vertragsbeginn IS NULL OR
V.Vertragsbeginn < CONVERT(DATETIME, '@StartDatum',
102)) AND (VD.Rechnung = 1)'

set @strAktNutzer = 'SELECT N.Nachname, N.Vorname, N.Anrede, T.Titel,
Kst.Kostenstelle
FROM dbo.OS_MOB_Mitarbeiter_Vertragslinks NLink LEFT OUTER JOIN
(SELECT OS_KMitarbeiter, Kostenstelle
FROM dbo.Sicht_Kostenstellen
WHERE (Linkende IS NULL) AND (Linkbeginn
<= CONVERT(DATETIME, '@EndDatum', 102)) OR
(Linkende >=
CONVERT(DATETIME, '@EndDatum', 102)) AND (Linkbeginn <= CONVERT(DATETIME,
'2009-03-31', 102)))
Kst RIGHT OUTER JOIN
dbo.OS_Kundenmitarbeiter N ON Kst.OS_KMitarbeiter =
N.OS_KMitarbeiter LEFT OUTER JOIN
dbo.Titel T ON N.TitelNr = T.TitelNr ON
NLink.OS_KMitarbeiter = N.OS_KMitarbeiter
WHERE (NLink.Linkbeginn <= CONVERT(DATETIME, '@EndDatum', 102)) AND
(NLink.Linkende IS NULL OR
NLink.Linkende >= CONVERT(DATETIME, '@EndDatum',
102)) AND (N.KundeNr = @KundeNr)'

Begin

SELECT V.VertragNr, V.Vertragsnummer, V.Rufnummer,
dbo.Proz_AktTarife_Vertrag(V.VertragNr) AS Tarif, N.OS_KMitarbeiter,
N.Nachname, N.Vorname,
N.Anrede, N.Titel, N.Kostenstelle
FROM @strAktVert V LEFT OUTER JOIN
@strAktNutzer N ON V.VertragNr = N.VertragNr

END
GO
 

Lesen sie die antworten

#1 Hannes Brunner
15/04/2009 - 18:41 | Warnen spam
Hallo Patrick,

Patrick Pohlmann schrieb:
Hallo Zusammen,

für eien Webanwendung benötige ich eine gespeichrtet Prozedur, die
eigentlich auf zwei Unterabfragen basiert. Jetzt weis ich aber nicht, wie
ich soetwas hinbekomme.

Ich habe mal folgenden - nicht richtigen Ansatz gewàhlt. Kann mir jemand
sagen wie ich das richtig mache?



<snips SQL-Code>

ich habe den starken Verdacht dass dir nicht klar ist was der
Unterschied zwischen OUTER und INNER JOIN ist. Damit solltest du dich
mal auseinandersetzen.

Ach ja, und falls du deine eigenen SQL-Abfragen nicht mehr lesen kannst:
http://www.sqlinform.com/

Gruß
Hannes

Ähnliche fragen