Jump to content

Lenz

Members
  • Gesamte Inhalte

    5
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Lenz

  1. vor 1 Minute schrieb winmadness:

    Klasse. Hätte ich auch gleich darauf kommen können. Wenn Du den Befehl direkt einer Variable zuweist, dann musst Du natürlich die gesamte Anweisung als String in Hochkomma setzen. Wenn Du den Befehl dann in einer Tabelle speicherst, dann ist das Feld bereits ein String und muss somit bei einer Zuweisung zu einer Variable nicht mehr in Hochkomma gesetzt werden.

    Nach dieser Erklärung ist alles ganz logisch, aber irgendwann habe ich den Wald vor lauter Bäumen nicht mehr gesehen und so lange beschäftige ich mich noch nicht mit MSSQL. 

    Mir hat es sehr gut gefallen, dass ich nach so kurzer Zeit schon Infos und Anregungen erhalten habe. Vielen Dank an alle.

    • Like 2
  2. vor 1 Minute schrieb winmadness:

    Lasse beim Speicher in die Tabelle mal die Hochkomma um den gesamten Befehl weg und für den Paratemter "query" nur einfache Hochkomma, also

    
    select * from openquery([PA_61_PRODUCTION_PAVAR], 'select AdressNr
         , substring(BelegArt,1,3) as BelegArt
         , substring(Firma,1,10) as Firma
         , substring(Hausnummer,1,12) as Hausnummer
         , substring(Name1,1,35) as Name1
         , substring(Name2,1,35) as Name2
         , substring(Name3,1,35) as Name3
         , substring(Ort,1,30) as Ort
         , substring(PLZ,1,10) as PLZ
         , ReferenzNr
         , substring(Staat,1,3) as Staat
         , substring(Strasse,1,30) as Strasse
         , substring(Typ,1,1) as Typ
         , substring(V_BelegKopfAdr_Obj,1,60) as V_BelegKopfAdr_Obj
    FROM PUB.V_BelegKopfAdr')

     

    Ich habe schon soviel probiert, aber diese Version nicht. Danke sie läuft und somit eine Arbeitsgrundlage für die ganz langen Scripte.

  3. vor 1 Minute schrieb winmadness:

    Auf die Schnelle ein Tipp: einfach den select bis auf ein Feld strippen und dann testen. Wenn es läuft nach und nach die anderen Felder hinzufügen.

    Danke, werde ich auch noch versuchen müssen. Hierbei handelt es sich schon um eine Kurzversion, eine Merge - Anweisung kann bis zu 8000 Zeichen enthalten.

    vor 5 Minuten schrieb winmadness:

    Auf die Schnelle ein Tipp: einfach den select bis auf ein Feld strippen und dann testen. Wenn es läuft nach und nach die anderen Felder hinzufügen.

    Meine Kurzversion manuell gestartet und lauffähig:

     

    image.png.f571cb6853d21a009973a56b64285e26.png

     

    Das ganze in einem Datenbankfeld gespeichert von dort in eine Variable und mit execute ausgeführt:

    image.png.fb6a83b747ae4636c63689a4fdd63ba7.png

     

    Leider wieder eine Fehlermeldung.

  4. Ich möchte viele SQL Anweisungen ausführen, aktuell sind diese Anweisungen alle in einer Datei mit Endung .sql gespeichert, zukünftig sollen sie in der Datenbank stehen.

    Manuell sieht die Anweisung folgendermaßen aus:

     

    declare @tSQL nvarchar(max)

    set @tSQL = 'select * from openquery([PA_61_PRODUCTION_PAVAR], ''select AdressNr
         , substring(BelegArt,1,3) as BelegArt
         , substring(Firma,1,10) as Firma
         , substring(Hausnummer,1,12) as Hausnummer
         , substring(Name1,1,35) as Name1
         , substring(Name2,1,35) as Name2
         , substring(Name3,1,35) as Name3
         , substring(Ort,1,30) as Ort
         , substring(PLZ,1,10) as PLZ
         , ReferenzNr
         , substring(Staat,1,3) as Staat
         , substring(Strasse,1,30) as Strasse
         , substring(Typ,1,1) as Typ
         , substring(V_BelegKopfAdr_Obj,1,60) as V_BelegKopfAdr_Obj
    FROM PUB.V_BelegKopfAdr'')'

    exec (@tSQL)

     

    diese Anweisung wird fehlerfrei ausgeführt.

     

    In der Tabelle in einem Attribut steht alles von 'select bis '')'

     

    In der Prozedur habe ich eine Variable deklariert, in der ich den Inhalt aus dem Tabellenfeld zur weiteren Bearbeitung schreibe.

    declare @UpdateProzedur nvarchar(max);

     

    Das Auslesen und Aufrufen sieht wie folgt aus:

    set @UpdateProzedur = (select [Befehl_Update] from [pA_61_Production_Sichten].[dbo].[Auslesetabellen] where Tabelle = @UpdateTabelle);
            
            
            -- ausführen des Scriptes
            
                if @UpdateTabelle = 'V_BelegKopfAdr'
                 execute(@UpdateProzedur);
                if @UpdateTabelle = 'V_BelegKopfAdr'
                    print(@UpdateProzedur);

     

    den Print Befehl habe ich eingebaut um eine Ausgabe zu bekommen, damit ich weiß, was ausgelesen worden ist.

     

    Nach dem execute erhalte ich die folgende Meldung:

     

    Meldung 102, Ebene 15, Status 1, Zeile 13
    Falsche Syntax in der Nähe von "select * from openquery([PA_61_PRODUCTION_PAVAR], 'select AdressNr
         , substring(BelegArt,1,3) as BelegArt
         , substring(Fir".
    'select * from openquery([PA_61_PRODUCTION_PAVAR], ''select AdressNr
         , substring(BelegArt,1,3) as BelegArt
         , substring(Firma,1,10) as Firma
         , substring(Hausnummer,1,12) as Hausnummer
         , substring(Name1,1,35) as Name1
         , substring(Name2,1,35) as Name2
         , substring(Name3,1,35) as Name3
         , substring(Ort,1,30) as Ort
         , substring(PLZ,1,10) as PLZ
         , ReferenzNr
         , substring(Staat,1,3) as Staat
         , substring(Strasse,1,30) as Strasse
         , substring(Typ,1,1) as Typ
         , substring(V_BelegKopfAdr_Obj,1,60) as V_BelegKopfAdr_Obj
    FROM PUB.V_BelegKopfAdr'')'

     

    Ich weiß mir leider nicht mehr zu helfen und finde den Fehler nicht, wo ist der Unterschied, ob ich den SQL Text manuell in einer Variablen speichere, oder ich die Werte aus einem Attribut hole und in einer Variablen speichere zum Ausführen.

    Vielleicht kann mir jemand hierbei helfen.

×
×
  • Neu erstellen...