![]() |
Datenbank: MSSQL • Version: 2008 • Zugriff über: ADODB
Tabellenwertfunktion in MSSQL 2008
Hallo,
ich benutze gerade zum ersten mal eine Tabellenwertfunktion und bin mir nicht ganz sicher, was ich falsch mache. hier erstmal kurz der code (den Code habe ich abgeändert, da es nur um den Aufbau geht, also keine Fragen über den Sinn dieser funktion bitte ;D)
SQL-Code:
So, wenn ich das jetzt richtig versatnden habe, wird eine Temporäre Tabelle mit dem namen @ResultTable angelegt.
CREATE FUNCTION [gl].[Get_BelegMwSt]
( @FromBelegnr BIGINT = 0 ,@TillBeletnr BIGINT = 99 ,@MwStSatz FLOAT ) RETURNS @ResultTable TABLE(RecID BIGINT, Belegnr BIGINT, BetragNetto FLOAT, BetragBrutto FLOAT) AS BEGIN DECLARE @iRecID BIGINT ,@iBelegnr BIGINT ,@iBetragNetto FLOAT ,@iBetragBrutto FLOAT INSERT INTO @ResultTable (RecID, Belegnr, BetragNetto) (SELECT RecID, Belegnr, BetragNetto FROM gl.Belege WHERE BelegNr >= @FromBelegnr AND BelegNr <= @TillBelegnr --GetMwSt UPDATE @ResultTable SET BetragBrutto = (SELECT (B.BetragNetto * (100 + @MwStSatz)) /100 FROM gl.Belege B WHERE B.RecID = @ResultTable.RecID ) RETURN da kann man dann daten einfügen und ändern und mit Return wird die komplette tabelle ausgegeben. Wenn ich aber versuche die Funktion abzuspeichern, kommt die Fehlermeldung: Meldung 137, Ebene 16, Status 1, Prozedur Get_EPLStatusContradictory, Zeile 80 Die '@ResultTable'-Skalarvariable muss deklariert werden. Aber ich dachte, das hätte ich mit der Zeile schon erledigt.... RETURNS @ResultTable TABLE(RecID BIGINT, Belegnr BIGINT, BetragNetto FLOAT, BetragBrutto FLOAT) wäre super, wenn jemand von euch n tipp für mich hätte mfg |
AW: Tabellenwertfunktion in MSSQL 2008
Das sieht soweit alles richtig aus.
Welche Zeile ist den konkret die Zeile 80? |
AW: Tabellenwertfunktion in MSSQL 2008
Hallo,
ich sehe spontan @TillBeletnr als den Übeltäter. Ciao Frank |
AW: Tabellenwertfunktion in MSSQL 2008
hallo,
zeile 80 is quasi die hier
SQL-Code:
das is die letzte über dem Return
WHERE B.RecID = @ResultTable.RecID )
@ Frank ... leider liegts nich daran, denn ich hab mich da einfach vertippt, als ich das hier rein geschrieben habe, wie gesagt, ging nur um die struktur ;) aber danke schonmal für die antworten mfg edit: ich hab gerade festgestellt, dass das wohl nur bei dieser Konstruktion auftaucht UPDATE @ResultTable SET BetragBrutto = B.BetragNetto * (100 + @MwStSatz)) /100 FROM gl.Belege B WHERE B.RecID = @ResultTable.RecID mfg nochmal edit habs hinbekommen! das problem war, dass man das @ResultTable.RecID so nicht schreiben kann, wenn man das aber nich davor geschrieben hat, sagte er, dass das feld nicht gebunden werden kann. Wenn man also die Felder in der TempTabelle anders nennt, funktionierts. quasi so:
Code:
mfg
CREATE FUNCTION [gl].[Get_BelegMwSt]
( @FromBelegnr BIGINT = 0 ,@TillBeletnr BIGINT = 99 ,@MwStSatz FLOAT ) RETURNS @ResultTable TABLE(RecIDTmp BIGINT, Belegnr BIGINT, BetragNetto FLOAT, BetragBrutto FLOAT) AS BEGIN DECLARE @iRecID BIGINT ,@iBelegnr BIGINT ,@iBetragNetto FLOAT ,@iBetragBrutto FLOAT INSERT INTO @ResultTable (RecIDTmp, Belegnr, BetragNetto) (SELECT RecID, Belegnr, BetragNetto FROM gl.Belege WHERE BelegNr >= @FromBelegnr AND BelegNr <= @TillBelegnr --GetMwSt UPDATE @ResultTable SET BetragBrutto = B.BetragNetto * (100 + @MwStSatz)) /100 FROM gl.Belege B WHERE B.RecID = RecIDTmp RETURN |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz