Zum Inhalt springen

Funktion liest nicht parameter


Borinator

Empfohlene Beiträge

Hallo zusammen,

ich danke schonmal im voraus an alle helfenden.

Folgendes Problem:

Das ist meine FUnktion


ALTER FUNCTION dbo.VZA_FORMATDATE (@datum AS DATETIME, @str as varchar(254)

)

RETURNS VARCHAR(254) AS


BEGIN

 	DECLARE @out as varchar(254)

    if @str = 'YYYY'

    set @out = convert(varchar(4), @datum, 112)

    if @str = 'MM'

    set @out = CONVERT(varchar(2), @datum, 10)

    if @str = 'YYYYMM'

    set @out = convert(varchar(6), @datum, 112)

    return @out


END

Den FUnktionsaufruf habe ich mir so vorgestellt.

dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')

Das Problem ist das meine Funktion nicht auf 'Zaehldatum' zugreifen kann. Die Funktion erwartet einen manuel eingegebenes Datum für die Variable @datum.

Ich will aber das sich die Funktion das datum selber aus einer spalte nimmt die ich ihm vorgebe.

Verbesserungsvorschläge nehme ich gerne für meine Funktion an^^

Ich bin in MSSQL noch ein anfänger habe mich erst seit 2 wochen da eingearbeitet:D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erstmal für die schnelle Antwort. Ich teile meiner Funktion schon mit woher er die daten kriegt. Ich habe eine Sicht geschrieben in der meine Funktion aufgerufen wird, aber leider kommt immer beim ausführen die Fehlermeldung ungültig spaltenname 'Jahr', 'Monat' usw. also praktisch dort wo meine Funktion aufgerufgen wird entstehen die Fehler.


CREATE VIEW QBSUMMENMONAT_2

(

  VONKNOTENNR,

  NACHKNOTENNR,

  JAHR,

  MONAT,

  JAHRMONAT,

  TBLARTNR,

  SORTER,

  SORTEROHNEART

)

AS

SELECT 

   VonKnotenNr, 

   NachKnotenNr,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) AS JAHR,   -- hier wird dann die erste funktion aufgerufen und in Jahr gespeichert

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) AS MONAT,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')) AS JAHRMONAT,

   tblArtNr, 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) AS Sorter, 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) AS SorterOhneArt

FROM

   tblStreckenSummeTag

GROUP BY 

   VonKnotenNr, 

   NachKnotenNr, 

   JAHR,                --hier kommt dann die fehlermeldung ungültige spaltenname und für die nächsten SPalten auch

   MONAT,

   JAHRMONAT,

   tblArtNr,

   Sorter,

   SorterOhneArt;

Ich scheiter gerade nur an diesem view alles andere funktioniert einwandfrei soweit ich das sehe^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nu schaem dich erstmal dafuer, dass du im ersten Post nicht dein Problem geschildert hast. Wenn du schon meinst, du wuesstest in welche Richtung es geht, dann kann man damit oftmals recht wenig anfangen ;)

Dein Problem ist die Abarbeitungsreihenfolge des Querys

Hier nachzulesen

Das Group by wird vor dem select angewandt, was erklaert wieso das Alias welches du im Select vergibst nicht schon im Group by bekannt ist.

Das heisst dann fuer dich, dass du deine Funktionen im Group by nochmals aufrufen musst.

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

HI

ich muss ja schon sagen du antwortest in rekordzeit:D

wenn ich dich richtig verstanden habe müsste meine Order By Klausel folgendermaßen aussehen:


GROUP BY 

   VonKnotenNr, 

   NachKnotenNr, 

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) ,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) ,

   dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')),

   tblArtNr,

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) , 

   CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) ;


Ich habs ausprobiert. Ich kriege jetzt keine Fehlermeldung, aber du kennst das sicher keine Fehlermeldung heißt ja nicht das es keine fehler gibt^^

Ich muss erstmal die Datenbank austesten, ob alles so funktioniert wie es sein soll. Ich danke dir VIELMALS für deien Hilfe du hast mich viel weiter gebracht.

:uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...