Announcement

Collapse
No announcement yet.

Sql-Script für Daten aus einer bzw. mehreren Tabellen erstellen - wie?

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

  • Sql-Script für Daten aus einer bzw. mehreren Tabellen erstellen - wie?

    Hallo!
    <P>
    Meine leere Datenbank kopieren und wieder einspielen kann ich jetzt ja. (Danke nochmal.)
    Jetzt möchte ich auch die Daten von ausgewählten (oder auch mal allen) Tabellen in ein sql-Script bekommen, das ich dann dem osql übergeben kann, damit es die Datenbank füllt.
    <P>
    Der Generator vom Enterprise Manager scheint nur leere Tabellen zu kopieren und auch über Exportieren hat es nicht geklappt.
    <P>
    Gibt es da etwas fertiges oder muss ich was selberbauen?
    <P>
    Danke
    Sonja

  • #2
    Hallo,
    &gt;Gibt es da etwas fertiges ...
    Ja - auch wenn es nicht der Enterprise Manager ist (das Tool für die Datenbankadministratoren), sondern statt dessen <b>Visual Studio .NET 2002/2003</b> (das Tool für die Entwickler) ist. Wenn dort in einem <i>Database Project</i> eine Tabelle über den <i>Server Explorer</i> exportiert wird (Menüpunkt <i>Generate Create Script...</i>), legt VS.NET neben dem SQL-Script für die Tabellenstruktur auch noch eine <b>.DAT</b>-Datei für den Tabelleinhalt an. Zusätzlich wird auch noch eine <b>.CMD</b>-Datei generiert, die Alles mit Hilfe des Kommandozeilen-Tools <b>osql.exe</b> auf dem Zielrechner wieder zusammenbau. Das sieht zum Beispiel dann so aus - wie zu erkennen ist, nutzt das Script das <b>BCP.EXE</b>-Dienstprogramm vom MS SQL Server, um die exportierten Daten in die Tabellen zu laden:
    <code>
    @echo off
    REM: Command File Created by Microsoft Visual Database Tools
    REM: Date Generated: 04.03.2005
    REM: Authentication type: Windows NT
    REM: Usage: CommandFilename [Server] [Database]

    if '%1' == '' goto usage
    if '%2' == '' goto usage

    if '%1' == '/?' goto usage
    if '%1' == '-?' goto usage
    if '%1' == '?' goto usage
    if '%1' == '/help' goto usage

    osql -S %1 -E -b -i "CreateExternTable.sql"
    if %ERRORLEVEL% NEQ 0 goto errors

    bcp "%2.dbo.SD_BL" in "dbo.SD_BL.dat" -S %1 -T -k -n -q
    if %ERRORLEVEL% NEQ 0 goto errors
    ...
    ...
    ...
    </code&gt

    Comment


    • #3
      Danke für deine Antwort.
      Ich kann sie nur leider nicht nacharbeiten.
      <P>
      Also. Ich habe Visual C++ 2003 Standard.
      In meinem Projekt habe ich die Datenbank verbunden und kann mit die Tabellen und die Daten angucken.
      Aber den von dir genannten Menüpunkt kann ich nicht finden.
      <p>
      Wodran kann das liegen - oder habe ich einfach an der falschen Stelle geschaut

      Comment


      • #4
        Hallo,
        &gt;Woran kann das liegen...
        die Standard-Version von Visual Studio .NET wird keine Datenbank-Projekte unterstützen. Als Anlage füge ich das Aussehen meiner Version (Enterprise Architect) bei

        Comment


        • #5
          Ja, du hast viel mehr Möglichkeiten.
          Da kann man ja richtig neidisch werden...
          Also haben wir mal wieder am falschen Ende gespart.
          <P>
          Fällt dir noch eine Möglichkeit ein?
          Sonst werde ich mir wohl doch was selberbasteln

          Comment


          • #6
            Hallo,
            &gt;Fällt dir noch eine Möglichkeit ein?
            nun, man kann die Funktionen/Tools des MS SQL Server in eigener Regie aufrufen.
            <br>
            a) Daten der Tabelle über die die Systemprozedur <b>xp_cmdshell</b> exportieren, indem BCP.EXE aufgerufen wird:
            <code>
            EXEC master..xp_cmdshell "bcp tempdb.dbo.Quelle out C:\Temp\Quelle.bcp -T -N "
            </code>
            b) Daten der Tabelle entweder direkt über BCP.EXE oder in einem eigenen SQL-Script über die <b>BULK INSERT</b>-Anweisung importieren:
            <code>
            BULK INSERT
            OSTEST.dbo.Ziel
            FROM
            'C:\Temp\Quelle.bcp'
            WITH
            (
            DATAFILETYPE = 'widenative',
            BATCHSIZE = 10000,
            TABLOCK
            )
            </code&gt

            Comment


            • #7
              Danke, das werde ich mir mal genauer ansehen.
              Es sieht auf jeden Fall einfacher und weniger fehleranfällig aus, als das, was ich jetzt vorhatte

              Comment


              • #8
                So, ich bin jetzt so weit, dass der Aufruf wohl zu klappen scheint, aber ich bekomme diese Fehlermeldung:
                ---------------------------
                BCP support error
                ---------------------------
                Unable to load BCP resource DLL. BCP cannot continue.

                ---------------------------
                OK
                ---------------------------
                <P>
                Da werde ich wohl nochmal suchen müssen.
                Es wäre ja so schön einfach gewesen..

                Comment


                • #9
                  So, meine MSDE Installation hier ist laut Google schrott - aber ich hab ja noch genug PCs hier rumschwirren.
                  Den Hinweg habe ich mittlerweile geschafft, zumindest fast.
                  <P>
                  Gibt es eine Möglichkeit, dieses Formatfile zu "skippen"?
                  Ich muss momentan für jede Tabelle einmal das bcp auf der Kommandozeile aufrufen (statt aus dem Programm heraus) und diese Datei erzeugen. Dann erst kann ich es vollautomatisch laufen lassen.
                  Da ich aber im Prinzip nur die Vorschläge, die da so kommen bestätige, ist das doch eigentlich auch umgehbar, wenn der die Infos schon hat. Ja? Wie?
                  <P>
                  An den "Rückweg" mache ich mich Morgen. :

                  Comment


                  • #10
                    So, ich kriege es jetzt hin.
                    Wenn es erstmal funktioniert ist es ja supereinfach. *freu*
                    <P>
                    Also: Export mit
                    bcp dbname.dbo.tabelle out tabelle.bcp -N -U sa -P meinpwd
                    <P>
                    und Import mit
                    bcp dbname.dbo.tabelle in tabelle.bcp -N -E -U sa -P meinpwd
                    <P>
                    Dankeschön nochma

                    Comment

                    Working...
                    X