T-SQL Verschneiden von Stammdaten

Ich habs gelöst es waren ein paar Komma's (Peinlich :p )
So folgendes Problem das Skript läuft nun richtig.... bin zum Schrittzähler 3790 gesprungen und auch die letzten Schritte laufen gut.....
Wenn ich aber das ganze Skript automatisch ablaufen lasse, dann bekomme ich unter Meldungen das hier angezeigt
[...]
(1 Zeile(n) betroffen)

(1 Zeile(n) betroffen)
(1 Zeile(n) betroffen)
(1 Zeile(n) betroffen)
(1 Zeile(n) betroffen)
Fehler beim Ausführen des Batches. Fehlermeldung: Fehler beim Erstellen des Fensterhandles.
Ansonsten keine Fehlermeldung und das Skript läuft auch bis Ende aber es Fehlen einige Querys im Verlauf der "Ergebnisse" im SQL Managment Studio (erkenne ich daran dass sqlskript_2 fehlt)
 
Werbung:
Ja das ist leider nicht so schön zu debuggen. Jede "Zeile betroffen" Meldung ist ein erfolgreicher durchlauf, zwischendurch gabs dann mal einen Fehler. Wenn du weißt bei welchem Datensatz einfach mal @sqlscript_1 (oder 2?) für den Datensatz erstellen und ausgeben und dann hier posten.

Performance Tipp: Verwende keine Schleifen :)
 
Beim einzelnen Schritt durchlauf von 1-3799 keine Fehler und kein Abbruch aber immernoch wenn ich die autoamtisch ausführe zerschiesst sichs....
 
Also hab den letzten Fehler gefunden und brauch dabei hilfe und zwar lag der Fehler bei sqlscript_2
Es wird einfach nicht der komplette Inhalt ausgegeben bei der Ausführung von sqlscript_2
Es müsste so aussehen:
Code:
update BOADMIN.IDSDATEN setpdv_wert_st=to_char(to_number(pdv_wert_st)* 86.4)where blome_parameter=455 and blome_BP='20087' and ARCHIV is NULL;
update BOADMIN.IDSDATEN setPDV_WERT_NM = to_number(PDV_WERT_ST) where ARCHIV is NULL;
update BOADMIN.IDSDATEN setpdv_startzeit=ltrim((to_char(trunc(to_number(pdv_startzeit)),'09'))) || ':' || ltrim((to_char(trunc(((to_number(pdv_startzeit))-(trunc(to_number(pdv_startzeit))))*60),'00')))where pdv_typ='HE' and pdv_startzeit is not null and ARCHIV is NULL;
commit;
Es sieht aber so aus:
Code:
update BOADMIN.IDSDATEN set pdv_wert_st = to_char(to_number(pdv_wert_st) * 86.4) where blome_parameter =455 and blome_BP = '20087' and ARCHIV is NULL;
update BOADMIN.IDSDATEN set PDV_WERT_NM = to_number(PDV_WERT_ST) where ARCHIV is NULL;
update BOADMIN.IDSDATEN set pdv_startzeit =ltrim((to_char(trunc(to_number(pdv_startzeit)),'09'))) || ':' || ltrim((tu_char(trunc((to_number(pdv_startzeit)) - (trunc(to_number(pdv_startzeit))))*60),'00'))) where pdv_typ='HE' and pdv_startzeit is not null an
Vorher wurde mehr abgeschnitten aber ich habe die oberen zwei Updates und das letzte update nun alleine ausgeführt, aber es ist immer noch net genug dass nichts abgeschnitten wird....
Kann ich mit einem select zwei variablen als einen befehl ausführen?
Z.B.
SET @sql1 = 'SELECT *'
SET @sql2= 'FROM TABLE'
SELECT @sql1+@sql2
--> Das select wird nun als 'Select * from table' ausgeführt?
 
Also mir fallen dazu zwei Fehlerquellen ein:
a) Dein String bricht irgendwo ab weil ein Hochkomma als Stringende erkannt wurde. Ich denke Escape Sequenzen hast du dir aber schon angeguckt und da wird nicht der Fehler liegen.
b) Deine Variable wird einfach zu lang, hier sind das aber nur ~500 Zeichen. Länger als 4000 oder 8000 Zeichen kann es glaube ich innerhalb eines MSSQL Scripts nicht werden, um VARCHAR(MAX) wirklich nutzen zu können musst du glaube ich mit einer Tabelle arbeiten. Vieleicht kommst du auch mit VARCHAR(4000) zu einem anderen Ergebnis. Ist aber eine Weile her das ich mich damit auseinander setzen musste.

Außerdem steht da was von tu_char() im zweiten Code aber nicht im Ersten?
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube ich habe noch einen Fehler dank deiner Hilfe gefunden und zwar hier:
Das erste SQL Statement das erzeugt und mittels Select angezeigt wird:
So siehts aus:
Code:
@sql Update BOADMIN.IDSDATEN SET BOADMIN.IDSDATEN.pdv_typ='ZW', BOADMIN.IDSDATEN.pdv_einheit='kWh', BOADMIN.IDSDATEN.BLOME_KDNR = '20012', BOADMIN.IDSDATEN.BLOME_ENTNST = '2001220087', BOADMIN.IDSDATEN.blome_BP = '20087', BOADMIN.IDSDATEN.blome_parameter = '81 varchar(max)
Und so müsste es aussehen:
Code:
@SQL Update BOADMIN.IDSDATEN SET BOADMIN.IDSDATEN.pdv_typ='ZW', BOADMIN.IDSDATEN.pdv_einheit='kWh', BOADMIN.IDSDATEN.BLOME_KDNR = '20012', BOADMIN.IDSDATEN.BLOME_ENTNST = '2001220087', BOADMIN.IDSDATEN.blome_BP = '20087', BOADMIN.IDSDATEN.blome_parameter = '812', BOADMIN.IDSDATEN.PDV_ID = 37, BOADMIN.IDSDATEN.BLOME_PNART_ID = 5 where BOADMIN.IDSDATEN.pdv_typ is null;

Warum zeigt der mitten im Text VARCHAR(MAX) an? Ich verstehs einfach nicht.... habe gerade alle variablen verschiedene größen zugeordnet um zu sehen an welcher variable es liegt es hat sich nur bei einer variable geändert und dies war @SQL..... wenn ich DECLARE@sqlvarchar(MAX) eingebe steht "'81 varchar(max)" am ende des Statement wenn ich @SQL varchar(4000) [X-Beliebige Zahl] eingebe kommt "'81 varchar" raus, dass (MAX) fällt weg... hab mich auch auf hochkomma suche begeben und zwar mehrmals.... ich verzweifele langsam... ich muss die letzten Fehler bis in 2 Wochen lösen, da ich dann das Projekt inkl. Dokumentation abgeben muss und langsam glaub ich das wird nix mehr :/
 
Ich weiß wie verworren das werden kann, kannst du nochmal den aktuellen Stand posten?

Also das Script, was die vorangehende Ausgabe liefert. Wenn Es auf Tabellen zurück greift wären natürlich CREATE Statements und Testdaten für diese Tabellen super, so kann man das ohne großen Aufwand testen.
 
Hey also ich habe die Quell Tabelle um die SQL Querys zu bauen hier hin exportiert für dich:
Code:
http://pastebin.com/CTcHQhiZ
Und hier ist die aktuelle Skript Version:
Code:
http://pastebin.com/zPYak5au
 
Werd ich mir heute Mittag mal angucken oder heute Abend. Hast du noch ein CREATE Statement für die Tabelle mit Datentypen?
 
Hier nochmal die Umsetzungstabelle aber direkt mit Create Statement... Ich hatte nicht gesehen dass das davor ohne war^^
 

Anhänge

  • script.zip
    126,1 KB · Aufrufe: 2
Werbung:
Das ist bei mir zumindest schonmal lauffähig und spuckt mir für ein paar Stichproben in deiner Ausgangstabelle auch korrekte SQL Statements aus (sofern ich das über Oracle Syntax beurteilen kann). Aus welchem Datensatz wird dein fehlerhafter SQL Code erzeugt? Tritt das nur auf wenn du viele Datensätze nacheinander verarbeitest?
 
Zurück
Oben