Announcement

Collapse
No announcement yet.

SQL DB in ODBC DB (erweitern)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL DB in ODBC DB (erweitern)

    Hallo zusammen,

    ich habe hier ein kleines Problem...
    Die Frage ist bestimmt sehr simple aber irgendwie klappt das bei mir nicht, naja was solls hier kommt die Frage

    Also ich habe über ein InfoPath ein Formular bereit gestellt die eingegebenen Daten werden nach vollstädigem ausfüllen in eine (SQL Server 2008 R2) DB geschrieben --> Klappt alles bestens

    Nun haben wir ein Firmen eigenes Programm wo ich die Daten aus der SQL-DB hineinschreiben soll. Bei dem Firmen Programm handelt es sich um eine ODBC-DB. Die entsprechende ODBC-DB habe ich schon herausgesucht.

    Nun muss ich die Daten aus der SQL-DB in die ODBC-DB hineinschreiben, sprich die ODBC-DB erweitern.

    Bisher habe ich bei einer erweiterung die Werte immer fest eingegeben:
    Insert Into SERVER.ODBC_Datenbankname (Spalte1, Spalte2, Spalte3)
    Values (WertSpalte1, WertSpalte2, WertSpalte3)

    Nun bin ich davon ausgegangen das ich dies auch mit einer Zuweisung machen kann, indem ich einfach den Namen der SQL DB als verweis bei Value eintrage. Sprich. SQL_DB_NAME.Spalte1
    Insert Into SERVER.ODBC_Datenbankname (Spalte1, Spalte2, Spalte3)
    Values (SQL_DB_NAME.Spalte1,
    SQL_DB_NAME.Spalte2,
    SQL_DB_NAME.Spalte3)

    Hier bekomme ich jedoch immer die Fehlermeldung: Der Mehrteilige Bezeichner konnte nicht gebunden werden.

    Würde mich freuen wenn ihr mir weiterhelfen könnt und ich hoffe das ich mein Problem einigermasse gut beschreiben konnte.

    MfG
    Sascha

    P.S.: Vergessen zu sagen das ich das gerne über ein Skript lösen möchte, da dies Vorgang im späteren Verlauf automatisiert werden soll. Was ich dann über den Auftragsaktivitätsmonitor laufen lassen kann. Darum kein direkter Export der SQL-DB auf die ODBC-DB
    Zuletzt editiert von Razerblade; 04.04.2012, 10:58.

  • #2
    Was ist eine ODBC-DB?? Und in deiner Beschreibung geht das so durcheinander, dass ich nicht genau weiß, was ich dir eigentlich raten soll.
    Also erst mal zwei Fragen:
    - handelt es sich um zwei SQL-Server-Datenbanken?
    - liegen diese am gleichen SQL-Server (und wenn ja, in der gleichen Instanz)?

    Und verwende bei Beispielen bitte die richtigen Namen für Server, Datenbanken, Tabellen, ... - diese Pseudoausdrücke sind manchmal mehr verwirrend als hilfreich.

    bye,
    Helmut

    Comment


    • #3
      Guten Morgen zusammen,

      erstmal möchte ich mich entschuldigen das ich so ein durcheinander fabriziert habe :/. Tu mir da grad ein bisschen schwer da ich an mehrer Baustellen bin. Also ich habe nur Datenbank mit DB abgekürzt. Also es handelt sich um eine ODBC-Datenbank.

      Sprich ich habe einen Server auf diesem ist mein SQL Server und einen weiteren Server auf welchem meine ODBC-Datenbanken sind.

      Da ich zwei verschiedene Server habe sind diese auch nicht in einer Instanz.

      Zugriff habe ich auf die ODBC-Datenbank indem ich mir einen Verbindungsserver auf dem SQL Server eingerichtet habe.

      So nun muss ich die Datenbank des SQL Server in die ODBC-Datenbank integrieren. Hier mal mein Code mit dem ich nicht weiter komme, da er mir bei Values einen Fehler bringt.

      insert into [SAB070]..[SYSADM].[ARTIKEL](ARTIKELNR, BEZEICHNUNG)
      Values (SharePoint_Server.[dbo].[Artikelstamm_Filler_Artikel_ODBC](ARTIKELNR, BEZEICHNUNG))
      select *from [SAB070]..[SYSADM].[ARTIKEL](
      Where ARTIKELNR = '123456789TEST'


      Hier die Fehlermeldung:
      Meldung 4121, Ebene 16, Status 1, Zeile 1
      Die 'SharePoint_Server'-Spalte oder die benutzerdefinierte Funktion bzw. das benutzerdefinierte Aggregat 'SharePoint_Server.dbo.Artikelstamm_Filler_Artikel _ODBC' wurde nicht gefunden, oder der Name ist mehrdeutig.

      Hoffe das ich mich nun ein bisschen besser ausgedrückt habe

      Mit freundlichen Grüssen
      Sascha

      Comment


      • #4
        Hallo,
        Originally posted by Razerblade View Post
        ...
        insert into [SAB070]..[SYSADM].[ARTIKEL](ARTIKELNR, BEZEICHNUNG)
        Values (SharePoint_Server.[dbo].[Artikelstamm_Filler_Artikel_ODBC](ARTIKELNR, BEZEICHNUNG))
        select *from [SAB070]..[SYSADM].[ARTIKEL](
        Where ARTIKELNR = '123456789TEST'
        ich kenne die Syntaxbesonderheiten des MSSQL-Server nicht, aber mich wundert es nicht, dass er dieses SQL-Wirrwar nicht interpretieren kann. In erster Linie solltest du also erstmal die Syntaxfehler beseitigen.

        [SAB070]..[SYSADM].[ARTIKEL](ARTIKELNR, BEZEICHNUNG)
        Das ist nach meinem Verständnis kein qualifizierter Bezeichner - Der Server interpretiert hier einen Funktionsaufruf! Ist es das? Ein Funktionsaufruf dürfte in einer Into-Klausel jedoch nicht zulässig sein. Das müsste eher so aussehen:
        ([SAB070].[SYSADM].[ARTIKEL].ARTIKELNR, [SAB070].[SYSADM].[ARTIKEL].BEZEICHNUNG)
        Das Gleiche gilt für den Ausdruck hinter Values!

        Ein Insert-Statement hat desweiteren ENTWEDER eine Values- ODER eine Select-Klausel. Eine Vermischung mit beidem ist mir nicht bekannt.

        Also sieh dir erstmal das Syntaxdiagramm für ein Insert-statement an und merze die Syntaxfehler aus.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hmm also bisher bin ich wie folgt vorgegangen wenn ich etwas von Hand eingefügt habe

          insert into [SAB070]..[SYSADM].[ARTIKEL](ARTIKELNR, BEZEICHNUNG)
          Values ('123456789TEST', 'TEST')
          select *from [SAB070]..[SYSADM].[ARTIKEL]

          Funktioniert auch soweit einwandfrei.


          Wollte das nun nach meinen Anforderungen anpassen und bin folgendem Beispiel gefolgt:
          INSERT INTO Cities (Location)
          VALUES ( dbo.CreateNewPoint(x, y) );
          das ich von dieser Seite habe--> http://msdn.microsoft.com/en-us/library/ms174335.aspx

          Aso das mit dem select habe ich nur drin damit er mir die Tabelle am Ende ausgibt, damit ich gleich überprüfen kann, ob die Daten auch tatsächlich in die Datenbank geschrieben worden sind.


          Kann natürlich auch sein das ich hier den grössten bockmist mache, lasse mich aber gerne Belehren

          Grüsse
          Sascha

          P.S.:
          Also Falk hat mich da doch auf ne einfachere Idee gebracht ^^

          insert into SharePoint_Server.[dbo].[ARTIKEL_IMPORT](ARTIKELNR, BEZEICHNUNG, STATUS)
          SELECT ARTIKELNR, BEZEICHNUNG, STATUS
          FROM SharePoint_Server.dbo.Artikelstamm_Filler_Artikel_ ODBC
          select *from SharePoint_Server.[dbo].[ARTIKEL_IMPORT]
          Where ARTIKELNR='12345678TEST'

          Das ist jedoch der gleich Server und die gleich Instanz (Test Datenbank), funktioniert jedoch einwandfrei.
          Wenn ich das nun auf den anderen Server umsetzte bekomme ich folgende Fehlermeldung:
          Meldung 7344, Ebene 16, Status 1, Zeile 1
          Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'SAB070' konnte INSERT INTO für die '[SAB070]..[SYSADM].[ARTIKEL]'-Tabelle wegen der 'LHMTYP'-Spalte nicht ausführen. Für die Spalte wurde der Standardwert verwendet.
          Zuletzt editiert von Razerblade; 05.04.2012, 10:58.

          Comment


          • #6
            Originally posted by Razerblade View Post
            Hmm also bisher bin ich wie folgt vorgegangen wenn ich etwas von Hand eingefügt habe

            insert into [SAB070]..[SYSADM].[ARTIKEL](ARTIKELNR, BEZEICHNUNG)
            Values ('123456789TEST', 'TEST')
            select *from [SAB070]..[SYSADM].[ARTIKEL]

            Funktioniert auch soweit einwandfrei.
            OK, dann fällt das wohl unter meine bereits erwähnte Nichtkenntnis der Syntaxbesonderheiten des MSSQL-Server... Wobei ich persönlich diese Schreibweise für kritisch halte, da sie leicht mit einem Funktionsaufruf verwechselt werden kann.

            siehe:
            Originally posted by Razerblade View Post
            ...bin folgendem Beispiel gefolgt:
            INSERT INTO Cities (Location)
            VALUES ( dbo.CreateNewPoint(x, y) );
            Ist das in der VALUES-Klausel nun ein Funktionsaufruf oder eine andere (MSSQL) Schreibweise für
            [highlight=sql]
            VALUES ( dbo.CreateNewPoint.x, dbo.CreateNewPoint.y );
            [/highlight]


            Originally posted by Razerblade View Post
            Aso das mit dem select habe ich nur drin damit er mir die Tabelle am Ende ausgibt, damit ich gleich überprüfen kann, ob die Daten auch tatsächlich in die Datenbank geschrieben worden sind.
            ... und tut damit nichts zur Sache und hat nichts mit dem Problem zu tun - also lass es weg, es verwirrt nur - wie du siehst.

            Gruß Falk

            P.S.: Formatierung von SQL in Beiträgen
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Originally posted by Falk Prüfer View Post
              [highlight=sql]
              VALUES ( dbo.CreateNewPoint.x, dbo.CreateNewPoint.y );
              [/highlight]
              Sollte auch so funktionieren, ist also nur eine andere Schreibweise.
              Ich habe nur den anderen weg gewählt damit es für mich später übersichtlicher ist da ich an die 50 Spalten integrieren muss.

              Wobei ich nun so wie du vorhin gesagt hast einen Insert Into - Select machen,
              so werde ich mir leichter tun. Auf diesem weg komme ich gerade auch Stück für Stück weiter

              Originally posted by Falk Prüfer View Post
              ... und tut damit nichts zur Sache und hat nichts mit dem Problem zu tun - also lass es weg, es verwirrt nur - wie du siehst.
              Alles klar tut mir leid, nun weiss ich bescheid das ich wirklich nur das nötige poste. Und so etwaige verwirrungen verhindern kann :P

              Gruss
              Sascha

              Comment


              • #8
                Originally posted by Falk Prüfer View Post
                OK, dann fällt das wohl unter meine bereits erwähnte Nichtkenntnis der Syntaxbesonderheiten des MSSQL-Server... Wobei ich persönlich diese Schreibweise für kritisch halte, da sie leicht mit einem Funktionsaufruf verwechselt werden kann.
                Ist doch ganz normale SQL-Syntax und nix MS-Spezifisches.

                dbo.CreateNewPoint (x,y) ist eine skalare Funktion, die einen Wert, zurückgibt...

                Also Falk hat mich da doch auf ne einfachere Idee gebracht ^^
                nicht einfacher, einfach nur richtig...

                insert into SharePoint_Server.[dbo].[ARTIKEL_IMPORT](ARTIKELNR, BEZEICHNUNG, STATUS)
                SELECT ARTIKELNR, BEZEICHNUNG, STATUS
                FROM SharePoint_Server.dbo.Artikelstamm_Filler_Artikel_ ODBC
                select *from SharePoint_Server.[dbo].[ARTIKEL_IMPORT]
                Where ARTIKELNR='12345678TEST'

                Das ist jedoch der gleich Server und die gleich Instanz (Test Datenbank), funktioniert jedoch einwandfrei.
                Wenn ich das nun auf den anderen Server umsetzte bekomme ich folgende Fehlermeldung:
                Meldung 7344, Ebene 16, Status 1, Zeile 1
                Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'SAB070' konnte INSERT INTO für die '[SAB070]..[SYSADM].[ARTIKEL]'-Tabelle wegen der 'LHMTYP'-Spalte nicht ausführen. Für die Spalte wurde der Standardwert verwendet.
                Nur eine Vermutung:
                Gibt es auf dem Quellserver in der Tabelle eine Spalte, die den Typ 'LHMTYP' hat?

                Wenn ja, dann könnte in der Select Abfrage bei der betreffenden Spalte ein CAST auf einen Datentyp machen, der vom ODBC-Treiber verstanden wird...

                Comment


                • #9
                  Guten Morgen zusammen,

                  ich werde mich heute mal an einen Entwickler wenden, vielleicht kann dieser mir weiter helfen. Und mir zeigen was ich denn genau falsch mache. Wenn ich eine Lösung für das Problem bekomme werde ich hier die richtige Abfrage posten.

                  Grüsse
                  Sascha

                  Comment

                  Working...
                  X