MSSQL- fragen zu Befehlen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • MSSQL- fragen zu Befehlen

      Hallo,
      ich habe 2 Tabellen jeweils in einer anderen MSSQL Datenbank.
      Beide Tabellen haben den gleichen Aufbau (Spalten).
      In der neueren Tabelle sind 7500 Einträge.
      In der älteren Tabelle sind 6300 Einträge.
      Diese Tabellen hat eine Spalte Namens "Itemnum" und ich versuche diese fehlenden 1200 von der neueren Tabelle rüber zur alten zu kopieren ohne die Itemnum Einträge doppelt einzutragen.
      Daher hab ich in der älteren Tabelle der Spalte Itemnum nun diesen Schlüssel gegeben, das diese Einträge "einzigartig" bleiben.
      Nun habe ich versucht die Einträge zu übertragen (in der Datenbank "account" ausgeführt):

      SQL-Abfrage

      1. INSERT INTO item
      2. SELECT * from account2.dbo.Item
      nun bekomme ich die Fehlermeldung beim Übertragen:

      Quellcode

      1. Meldung 2627, Ebene 14, Status 1, Zeile 1
      2. Verletzung der PRIMARY KEY-Einschränkung 'PK_Item'. Ein doppelter Schlüssel kann in das 'dbo.item'-Objekt nicht eingefügt werden.
      3. Die Anweisung wurde beendet.


      Jetzt frage ich mich, wie man ihm sagen kann, dass er Einträge, wo ein Fehler vorgefallen ist, ignorieren soll und mit dem nächsten Eintrag weiter machen soll.

      Ist das möglich?; und wie genau muss ich den Befehl ändern?
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="2"]Du kannst hingehen und die neuere auf die ältere batchen, die ältere vorher löschen.
      Anders müsstest du erstmal schaun, wo der erste regelkonforme datensatz vorliegt und von dort an dann abfragen und eintragen
      (wobei es evtl auch zu doppelten daten kommen könnte, wenn mal beide tables nicht gleich sortiert sind)[/SIZE][/COLOR][/FONT]
    • internetfreak;164665 schrieb:

      Du kannst hingehen und die neuere auf die ältere batchen, die ältere vorher löschen.

      Kleine Korrektur: Ausführen
      Nun das ist so, mehrere einträge der neuen tabelle haben andere werte, sind unter der gleichen itemnum in der alten tabelle zu finden. Daher will ich die Einträge der alten Tabelle behalten.

      Da fällt mich aber eine Möglichkeit ein, ich nimm die alte Tabelle, erstell eine Sicht wo nur itemnum aufgelistet ist.
      Diese nimm ich, und lösche die Einträge in der Neuen Tabelle, dann übertrage ich die alte rein.
    • Ich hoffe das gibt kein Prob. wenn ich Doppelpost mach (Push effekt zusätzlich).

      Ich möchte eine Tabelle mit den Werten einer anderer Updaten:

      SQL-Abfrage

      1. UPDATE [Item_2]
      2. SET [Item_2.ItemName] = [Item_3.ItemName]
      3. WHERE [Item_2.ItemNum]= [Item_3.ItemNum]
      aber er schreit rum=

      Quellcode

      1. Meldung 207, Ebene 16, Status 1, Zeile 3
      2. Ungültiger Spaltenname 'Item_2.ItemNum'.
      3. Meldung 207, Ebene 16, Status 1, Zeile 3
      4. Ungültiger Spaltenname 'Item_3.ItemNum'.

      wo genau liegt der Fehler? (die Spalten sind vorhanden)
    • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="2"]Hast du auch vorher alle nötigen Daten irgendwie aus der DB rausgeholt?
      Vorher klappts nich, der kann nicht direkt auf ne DB so zugreifen und so
      Und so wie der Fehler heißt, hast du dem ne falsche Spalte angegeben.
      Die angegebenen Spalten existieren garnich.[/SIZE][/COLOR][/FONT]
    • hallo, ich habe wieder fragen zu mssql,
      ich habe vor eine art usercounter zu erstellen die sich alle 60 min updated.
      nach dem die procedure die anzahl in eine variable gepackt hat, z.b. user=12
      möchte ich, das es eine bestimmte .txt datei auf einem externen ftp server öffnet, dort alles löscht, die zahl 12 einfügt und abspeichert.
      das man auf der hp anstatt von der db abzufragen von dem .txt dokument abfragen kann.
      kann mir jemand vorlagen machen für das ftp verbinden, datei ändern usw?
    • Zu deinem doppelten Tabellen problem:

      1. Du liest alle Itemnum von der neuen Tabelle und packst sie in ein array z.b:

      Quellcode

      1. $row = mssql_fetch_assoc(mssql_query("SELECT Itemnum FROM neuertabelle"));
      2. Aber wir machen es anderst! Wir hauen sie durch eine schleife:

      Quellcode

      1. $result = mssql_query("SELECT Itemnum FROM neuertabelle");
      2. While($row = mssql_fetch_assoc($result)) {
      3. //weiterer code blabla.
      4. }
      3. So jetzt wird immer ein Eintrag in $row reingehauen und "//weiterer code blabla." ausgeführt. Jetzt löschen wir die doppelten einträge aus der alten tabelle:

      Quellcode

      1. $result = mssql_query("SELECT Itemnum FROM neuertabelle");
      2. While($row = mssql_fetch_assoc($result)) {
      3. mssql_query("DELETE FROM altetabelle WHERE Itemnum = '".$row['itemnum']."");
      4. }
      4. Jetzt hat er alle einträge gelöscht die in der alten tabelle schon vorhanden waren. Jetzt kannst die neuetabelle einfach in die altetabelle packen.

      //Es kann sein das ich die Alte tabelle mit der neuen verwechselt habe x.x. Kommt halt drauf an welche insert's du löschen willst von der neuen oder alten.


      --------------

      Zu deinem FTP Problem:

      Mach doch eine PHP Datei auf dem FTP z.b (writeuserpeak.php). Dort übergibst du dan per POST / GET Parameter (am besten benutzt du noch ein pw z.b (passw0rd=xjsdojdhg) damit kein anderer die daten überschreiben kannst.

      Das Script updatet dan deine TXT datei lokal :)

      Wobei ich es professioneler finde das ganze in einer MY / MS SQL Tabelle zu speichern.