Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Spalte füllen lassen mit Bedinung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von DanielW, 26 Mai 2015.

  1. DanielW

    DanielW Benutzer

    Hallo,

    Ich stehe vor einem Problem, und weiß nicht wie ich es richtig anpacken soll.

    Ich habe eine Tabelle mit 5 Spalten und eine Tabelle mit 1 Spalte.
    Die Tabelle mit den 5 Spalten ist bereits gefüllt.

    Aber im Grunde interessieren nur 2 Spalten, Name und Type.
    Type ist ein integer und kann nur 1 oder 0 sein.

    Die Spalte von Tabelle Nr. 2 soll abhängig von den beiden oben genanten Spalten befüllt werden.
    Wenn der Typ = 0 ist, soll in der Spalte der Name drin stehen. Ist der Typ 1, soll in der Spalte ' ' + der Name drin stehen. Also einfach noch ein Paar Leerzeichen vorher.

    Insert Into Intern_Lokal.dbo.tabelle2(NameS)
    Select Name,

    Case When Type = '0'
    Then Name
    ELSE ' ' + Name
    END
    From dbo.contact

    So bekomme ich leider folgende Fehlermeldung, verstehe aber nicht warum. Ich habe die Fehlermeldung schon gegoogelt, aber ich kann mit der Erklärung nichts anfangen.

    Evtl. kann mir hier einer Weiterhelfen

    Danke im Voraus
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Aber vielleicht andere, nur wenn Du diese geheim hälst dann halt wieder nicht. Dumm gelaufen.

    Evtl. ist einfach die String-verkettung falsch. In PG wäre es || und nicht +.

    Ach so, was ich auch grad sehe: Du vergleichst einen Integer mit einem String. Das ist, ähm, ungeschickt. Vielleicht ist auch das der Fehler? Oder beides? Oder was anderes? Die Antwort findest Du in der Fehlermeldung ;-)
     
  3. ukulele

    ukulele Datenbank-Guru

    + ist kein Problem für die Verkettung von Strings in MSSQL.

    Meine Glaskugel tippt auf Type = 0 statt Type = '0' da Type ja eben kein String ist also ein Vergleich mit einem String keinen Sinn macht. Mehr stünde natürlich in der Fehlermeldung.
     
  4. DanielW

    DanielW Benutzer

    hab scheinbar vergessen die Fehlermeldung einzufügen :D

    "Die Auswahlliste für die INSERT-Anweisung enthält mehr Elemente als die Einfügeliste. Die Anzahl von SELECT-Werten und die Anzahl von INSERT-Spalten müssen übereinstimmen."

    An der Verkettung kann dieses Problem nicht liegen, da ich auch probiert habe, nur den Namen einzufügen. Mag sein, das dies so nicht korrekt ist, aber das löst nicht diesen Fehler aus.

    Dein 2. Hinweis verstehe ich leider nicht ganz. Wo vergleiche ich einen String mit einem Integer ?
     
  5. DanielW

    DanielW Benutzer

    Hat sich etwas überschnitten. Jetzt springt es mir auch ins Auge wo mein String integer vergleich ist... Wenn man stundenlang googelt und sucht, sieht man die leichtesten Dinge nicht mehr.

    Hab es gerade mal geändert, aber die Fehlermeldung ist immer noch vorhanden.
     
  6. ukulele

    ukulele Datenbank-Guru

    Dir fehlt hinter der CASE-Schleife (also hinter END) auch noch ein Spaltenalias AS spalte oder so. Eventuell wird die Spalte deshalb vom INSERT nicht als solche gezählt.

    PS: Sry du versuchst ja nur eine Spalte einzufügen, dein Select liefert aber zwei. Also entweder den Insert um eine Spalte ergänzen oder die beiden Spalten verketten.
     
    DanielW gefällt das.
  7. DanielW

    DanielW Benutzer

    Peinlich. Ja jetzt klappt es. Bin total verrückt geworden und wusste nicht weiter.

    Vielen Dank :))
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden