Variable in View verwenden

15/05/2008 - 14:58 von rudolf.kiepetz | Report spam
Ich versuche gerade, Variable in einer View zu verwenden.
Leider scheint das nicht zu funktionieren.
Wenn ich die Abfrage in Query-Analyzer ausführe funktioniertŽs,
so bald ich aber diese mit "create view xx as" abspeichern will,
erhalte ich die Fehlermeldung "Incorrect Synax".
Könnt Ihr mir bitte helfen?
Herzlichen Dank im Voraus!!

create view
vw_test
as

declare @1 as datetime, @2 as datetime, @3 as datetime, @4 as
datetime, @5 as datetime,
@6 as datetime, @7 as datetime, @8 as datetime, @9 as datetime, @10 as
datetime, @11 as datetime,
@12 as datetime, @ende as datetime
declare @jahr as char(4)
set @jahr='2008'
set @1='01.01.' + @jahr --jan
set @2='01.02.' + @jahr --feb
set @3='01.03.' + @jahr --mar
set @4='01.04.' + @jahr --apr
set @5='13.05.' + @jahr --mai
set @6='13.06.' + @jahr --jun
set @7='12.07.' + @jahr --jul
set @8='13.08.' + @jahr --aug
set @9='10.09.' + @jahr --sep
set @10='11.10.' + @jahr --okt
set @11='12.11.' + @jahr --nov
set @12='13.12.' + @jahr --dez
set @ende ='31.12.' + @jahr --dez


select distinct Datum as Periode, Profitcenter as Sappcid4,
ltrim(rtrim(DebitorNr)) as DebitorNr,
left(ltrim(Kostenart),7) as Kostenarten, sum(erloes)*-1 as HR,
datenart
from ep_hilfstabellen.dbo.vw_CEP_Plan_IST_FC_2008 a
left outer join
( select distinct CEP_OrgName, Profitcenter
from ep_hilfstabellen.dbo.tab_CEP_Organisation2007
where Profitcenter not in ('TS216', 'TS120' ) ) b
on a.CEP_OrgName=b.CEP_OrgName
left outer join
( select distinct Kunde, DebitorNr
from ep_hilfstabellen.dbo.tab_CEP_Kunden) c
on replace(a.Kunde, ' ','')= replace(c.Kunde,' ','')
max(Datenart) from ep_hilfstabellen.dbo.vw_CEP_Plan_IST_FC_2008
where Datenartcase
when getdate() between @1 and @3 then 'FC_01'
when getdate() between @3 and @4 then 'FC_02'
when getdate() between @4 and @5 then 'FC_03'
when getdate() between @5 and @6 then 'FC_04'
when getdate() between @6 and @7 then 'FC_05'
when getdate() between @7 and @8 then 'FC_06'
when getdate() between @8 and @9 then 'FC_07'
when getdate() between @9 and @10 then 'FC_08'
when getdate() between @10 and @11 then 'FC_09'
when getdate() between @11 and @12 then 'FC_10'
else 'FC_11'
end
and isnumeric(left(ltrim(Kostenart),1))=1
group by
Datum, a.CEP_OrgName, Profitcenter, DebitorNr,datenart,
left(ltrim(Kostenart),7)
having sum(erloes)<>0
 

Lesen sie die antworten

#1 Frank Kalis
15/05/2008 - 15:19 | Warnen spam
"" wrote:

Ich versuche gerade, Variable in einer View zu verwenden.
Leider scheint das nicht zu funktionieren.
Wenn ich die Abfrage in Query-Analyzer ausführe funktioniert´s,
so bald ich aber diese mit "create view xx as" abspeichern will,
erhalte ich die Fehlermeldung "Incorrect Synax".
Könnt Ihr mir bitte helfen?
Herzlichen Dank im Voraus!!

create view
vw_test
as

declare @1 as datetime, @2 as datetime, @3 as datetime, @4 as
datetime, @5 as datetime,
@6 as datetime, @7 as datetime, @8 as datetime, @9 as datetime, @10 as
datetime, @11 as datetime,
@12 as datetime, @ende as datetime
declare @jahr as char(4)
set @jahr='2008'
set @1='01.01.' + @jahr --jan
set @2='01.02.' + @jahr --feb
set @3='01.03.' + @jahr --mar
set @4='01.04.' + @jahr --apr
set @5='13.05.' + @jahr --mai
set @6='13.06.' + @jahr --jun
set @7='12.07.' + @jahr --jul
set @8='13.08.' + @jahr --aug
set @9='10.09.' + @jahr --sep
set @10='11.10.' + @jahr --okt
set @11='12.11.' + @jahr --nov
set @12='13.12.' + @jahr --dez
set @ende ='31.12.' + @jahr --dez


select distinct Datum as Periode, Profitcenter as Sappcid4,
ltrim(rtrim(DebitorNr)) as DebitorNr,
left(ltrim(Kostenart),7) as Kostenarten, sum(erloes)*-1 as HR,
datenart
from ep_hilfstabellen.dbo.vw_CEP_Plan_IST_FC_2008 a
left outer join
( select distinct CEP_OrgName, Profitcenter
from ep_hilfstabellen.dbo.tab_CEP_Organisation2007
where Profitcenter not in ('TS216', 'TS120' ) ) b
on a.CEP_OrgName=b.CEP_OrgName
left outer join
( select distinct Kunde, DebitorNr
from ep_hilfstabellen.dbo.tab_CEP_Kunden) c
on replace(a.Kunde, ' ','')= replace(c.Kunde,' ','')
max(Datenart) from ep_hilfstabellen.dbo.vw_CEP_Plan_IST_FC_2008
where Datenart> case
when getdate() between @1 and @3 then 'FC_01'
when getdate() between @3 and @4 then 'FC_02'
when getdate() between @4 and @5 then 'FC_03'
when getdate() between @5 and @6 then 'FC_04'
when getdate() between @6 and @7 then 'FC_05'
when getdate() between @7 and @8 then 'FC_06'
when getdate() between @8 and @9 then 'FC_07'
when getdate() between @9 and @10 then 'FC_08'
when getdate() between @10 and @11 then 'FC_09'
when getdate() between @11 and @12 then 'FC_10'
else 'FC_11'
end
and isnumeric(left(ltrim(Kostenart),1))=1
group by
Datum, a.CEP_OrgName, Profitcenter, DebitorNr,datenart,
left(ltrim(Kostenart),7)
having sum(erloes)<>0




Das funktioniert so auch nicht. Mache einfach eine Gespeicherte Prozedur
oder Inline Tabellenfunktion daraus. Für die kannst Du Parameter angeben und
die Variablen im Statement verwenden.

Dein Statement làsst übrigens wahrscheinlich auch noch eine Menge Raum für
weitere Optimierungen. :-)
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org

Ähnliche fragen