Martinha
Fleissiger Benutzer
- Beiträge
- 65
Hi,
ich möchte Dat Daten aus anderen Tabellen in die Tabelle Umsatz einfügen. Quelle sind Daten aus anderen Tabellen:
try
SET NOCOUNT ON;
-- Insert statements for procedure here
insert into [dbo].[umsatz] (UmsatzId
,kontoid
,betrag
,buchungstext
,umsatzdatum
,umsatzart
,newflag
,befreit)
select [udfautowert] (N'umsatz',N'umsatzid')
,leistung.kontoId
,[udfsaldo](Konto.KontoId) * -1
,N'Lastschrift vom ' + getdate() + N' AS BT'
,getdate()
,2
,1
,1
FROM Konto INNER JOIN Leistung ON Konto.KontoId = Leistung.KontoID
WHERE saldo*-1 >0 AND konto.KontoArt = 2 AND Konto.KontoStatus =1 AND Leistung.LeistungStatus=1
end try
Es gibt eine Scalar Funktion (udfautowert), die mit dynamischen SQL den nächsten pk-Wert für die Umsatztabelle berechnet (aktuller maximaler Index + 1).
Ferner gibt es eine Funktion (udfsaldo), die den aktuellen Saldo eines Kontos berechnet.
Wenn ich diese Funktion speichern will kommt die Meldung:
Msg 120, Level 15, State 1, Procedure umsatz_ausgleich, Line 25 [Batch Start Line 7]
Die Auswahlliste für die INSERT-Anweisung enthält weniger Elemente als die Einfügeliste. Die Anzahl von SELECT-Werten und die Anzahl von INSERT-Spalten müssen übereinstimmen.
Msg 102, Level 15, State 1, Procedure umsatz_ausgleich, Line 68 [Batch Start Line 7]
Falsche Syntax in der Nähe von "END".
Dann die Frage, kann ich das überhaupt so machen oder muss ich einen Cursor definieren und umsatzid für jeden neuen Satz neu berechnen?
Ich bin noch nicht so fitt in STp, aber eine spannende Sache!
ALTER FUNCTION [dbo].[udfautowert]
(
-- Add the parameters for the function here
@tabname as nvarchar(50)
,@pk_col as nvarchar(50)
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @autowert as int;
DECLARE @Sql NVARCHAR(MAX);
-- Add the T-SQL statements to compute the return value here
set @sql = N'select @autowert = max(' + @pk_col + N') from ' + @tabname
EXECUTE sp_executesql @SQL
-- Return the result of the function
RETURN @autowert +1
END
ALTER FUNCTION [dbo].[udfsaldo]
(
-- Add the parameters for the function here
@kontoid as int
)
RETURNS money
AS
BEGIN
-- Declare the return variable here
DECLARE @saldoumsatz as money
-- Add the T-SQL statements to compute the return value here
SELECT @saldoumsatz = SUM(betrag) from umsatz where KontoId = @kontoid
-- Return the result of the function
RETURN @saldoumsatz
END
Danke für Hilfe
Martin
ich möchte Dat Daten aus anderen Tabellen in die Tabelle Umsatz einfügen. Quelle sind Daten aus anderen Tabellen:
try
SET NOCOUNT ON;
-- Insert statements for procedure here
insert into [dbo].[umsatz] (UmsatzId
,kontoid
,betrag
,buchungstext
,umsatzdatum
,umsatzart
,newflag
,befreit)
select [udfautowert] (N'umsatz',N'umsatzid')
,leistung.kontoId
,[udfsaldo](Konto.KontoId) * -1
,N'Lastschrift vom ' + getdate() + N' AS BT'
,getdate()
,2
,1
,1
FROM Konto INNER JOIN Leistung ON Konto.KontoId = Leistung.KontoID
WHERE saldo*-1 >0 AND konto.KontoArt = 2 AND Konto.KontoStatus =1 AND Leistung.LeistungStatus=1
end try
Es gibt eine Scalar Funktion (udfautowert), die mit dynamischen SQL den nächsten pk-Wert für die Umsatztabelle berechnet (aktuller maximaler Index + 1).
Ferner gibt es eine Funktion (udfsaldo), die den aktuellen Saldo eines Kontos berechnet.
Wenn ich diese Funktion speichern will kommt die Meldung:
Msg 120, Level 15, State 1, Procedure umsatz_ausgleich, Line 25 [Batch Start Line 7]
Die Auswahlliste für die INSERT-Anweisung enthält weniger Elemente als die Einfügeliste. Die Anzahl von SELECT-Werten und die Anzahl von INSERT-Spalten müssen übereinstimmen.
Msg 102, Level 15, State 1, Procedure umsatz_ausgleich, Line 68 [Batch Start Line 7]
Falsche Syntax in der Nähe von "END".
Dann die Frage, kann ich das überhaupt so machen oder muss ich einen Cursor definieren und umsatzid für jeden neuen Satz neu berechnen?
Ich bin noch nicht so fitt in STp, aber eine spannende Sache!
ALTER FUNCTION [dbo].[udfautowert]
(
-- Add the parameters for the function here
@tabname as nvarchar(50)
,@pk_col as nvarchar(50)
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @autowert as int;
DECLARE @Sql NVARCHAR(MAX);
-- Add the T-SQL statements to compute the return value here
set @sql = N'select @autowert = max(' + @pk_col + N') from ' + @tabname
EXECUTE sp_executesql @SQL
-- Return the result of the function
RETURN @autowert +1
END
ALTER FUNCTION [dbo].[udfsaldo]
(
-- Add the parameters for the function here
@kontoid as int
)
RETURNS money
AS
BEGIN
-- Declare the return variable here
DECLARE @saldoumsatz as money
-- Add the T-SQL statements to compute the return value here
SELECT @saldoumsatz = SUM(betrag) from umsatz where KontoId = @kontoid
-- Return the result of the function
RETURN @saldoumsatz
END
Danke für Hilfe
Martin