Und plötzlich funktioniert der Code nicht mehr

IchHH

Datenbank-Guru
Beiträge
291
Hallo liebe Datenbank freunde,

ich weiß nicht ob ihr das auch kennt ein Code der Tage und Wochen super lief, will von heute auf morgen plötzlich nicht mehr das tun wofür er gedacht ist. So geht es mir. Obwohl sich nichts an der Umgebung verändert will der Code nicht mehr im letzten Teil die letzte mit der Vorletzten Spalte addieren.

Habt Ihr eine Idee woran das liegen könnte?

Hier der Code:
Code:
Truncate Table dbo.tmp
--------------------------------------------------
DECLARE    @kopf varchar(100),
        @query1 VARCHAR(2000),
        @query2 VARCHAR(8000),
        @ordinal INT,
        @tabelle VARCHAR(100),
        @letzte_spalte VARCHAR(100),
        @vorletzte_spalte VARCHAR(100),
        @query3 VARCHAR(8000)

SET @kopf = (Select Case When DateName(dw,GetDate()) = 'Montag'
                Then 'Saldo vom ' + Convert([nvarchar](10),DateAdd(day,-3,GetDate()),104)
                Else 'Saldo vom ' + Convert([nvarchar](10),DateAdd(day,-1,GetDate()),104) End)

SET @query1 =
'Insert into dbo.tmp
Select
    [Kontenart]
,    Cast([Saldo] as money) as tmp
--into dbo.tmp
From     dbo.[S_92591]
Where    [wBuch_Buchung_am] = Case When DateName(dw
,    GetDate()) = ''Montag'' Then Convert([nvarchar](10),DateAdd(day
,    -3
,    GetDate()),104) Else Convert([nvarchar](10),DateAdd(day
,    -1
,    GetDate()),104) End
And    [wBuch_jahr] = Year(GetDate())
Order by [Kontenart] ASC'
EXEC(@query1)
--Select * from dbo.tmp
--------------------------------------------------
Truncate Table dbo.tmp2
Insert into dbo.tmp2
select Concat(kontenart, gruppe) as Kontenart, sum("tmp") as tmp --into dbo.tmp2
from
(select kontenart, substring(kontenart,1,2) as gruppe, "tmp" from dbo.tmp) foo group by grouping sets ((kontenart),(gruppe))
--Select * from dbo.tmp2

Drop Table dbo.tmp3
--Insert into [tmp3]
SELECT     ISNULL(dbo.tmp2.Kontenart, [S_92660].Kontenart) AS Kontenarten, [S_92660].*,
                       ISNULL(dbo.tmp2.tmp, 0) AS tmpx into dbo.tmp3
FROM         [S_92660] FULL OUTER JOIN
                      dbo.tmp2 ON [S_92660].Kontenart = dbo.tmp2.Kontenart

                     -- Select * from dbo.tmp3

Alter Table dbo.tmp3 Drop Column Kontenart
EXEC sp_rename 'dbo.tmp3.Kontenarten', 'Kontenart', 'COLUMN'


SET     @tabelle = 'dbo.tmp3'
SET     @ordinal = ( SELECT max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle )
SET     @letzte_spalte = ( SELECT max(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal )
SET     @vorletzte_spalte = ( SELECT distinct COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal - 1 )
SET        @query3 = 'UPDATE [' + @tabelle + '] SET tmpx = isnull([' + @letzte_spalte + '],0) + isnull([' + @vorletzte_spalte + '],0)'

EXEC(@query3)
 
Werbung:
Hallo,

das ist ja der Hit. Es gibt keine Fehlermeldung. Er addiert nur den Wert der Vorletzten Spalte mit der letzten Spalte nicht, sondern beläßt den Wert der letzten Spalte und speichert den unter den neuen Namen ab.
 
Was für ein bizarres Konstrukt, das kann sich nur irgendwann zerlegen.

Hast du dir mal mit dem Code angeguckt was @query3 ergibt bevor du es ausführst? Vermutlich hat sich entweder etwas an der Spaltenreihenfolge geändert auf die du dich ja beziehst nämlich in dem du zuvor Spalten aus der Tabelle dropst und umbenennst.
 
Werbung:
Ha. Habe den Fehler gefunden. Man kann/darf scheinbar nicht in der Abfrage "Query3" mit dem Vorsatz dbo.tmp3 arbeiten da es sich hier nur ein Name der Tabelle genutzt werden darf, reicht schlichtweg "tmp3" und schon funktioniert es.

Danke!

Ja ich habe mir angeschaut und für mich sieht das logisch aus.
 
Zurück
Oben