1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Kniffliges SQL-statement...

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Poleander, 5 Mai 2009.

  1. Poleander

    Poleander Neuer Benutzer

    Hallo liebes Forum,

    ich habe folgendes Problem, an dem ich langsam verzweifle...

    gegeben sind zwei Tabellen:
    Tabelle Main mit folgenden Spalten
    id -> Primärschlüssel
    id_titel -> Fremdschlüssel von Titel.id

    Tabelle Titel
    mit folgenden Spalten
    id -> Primärschlüssel
    titel


    gesucht ist folgendes statement:
    in Tabelle Titel soll geprüft werden, ob ein eingehender String bereits in der Spalte titel existiert
    -> wenn ja, so soll die id dieses titels in der Tabelle Main unter id_titel eingetragen werden

    -> wenn nicht, so soll in Spalte titel (Tabelle Titel) ein neuer Eintrag vorgenommen werden und die id (von Tabelle Titel) des neues Eintrages in id_titel von Tabelle Main eingetragen werden.


    'e bissel Plan habe ich von SQL, doch dieses Statement macht mich alle... :-(

    für Ratschläge, Lösungsansätze, Lösungsvorschläge bin ich sehr dankbar

    beste Grüße
    Poleander
     
  2. Poleander

    Poleander Neuer Benutzer

    AW: Kniffliges SQL-statement...

    das Problem besteht weiterhin... ich hab mich nochmal d'ran gesetzt, krieg' aber nur 'nen Knoten im Hirn... und auf'm Zettel... selbst 'ne Pulle Wein hat da nicht viel ausrichten können...
     
  3. bieber

    bieber Benutzer

    AW: Kniffliges SQL-statement...

    deine Tabelle main macht überhaupt keinen Sinn, bzw. Sie hat keinen Zweck! Ansonsten lässt sich das Problem nicht ohne weiteres mit SQL lösen, da musst du schon ne Funktion schreiben, oder in deiner Programmiersprache entsprechende Abfragen einbauen, oder nen Trigger einbauen...

    aber wie gesagt, solange die Tabelle "main" überflüssig ist würde ich sowieso nichts machen ;-)
     
  4. Ritschi

    Ritschi Aktiver Benutzer

    AW: Kniffliges SQL-statement...

    Hi,

    Also in den Tabellen werden schon noch ein paar mehr Spalten drin sein.

    Lösen lässt sich das dann aber mit einer Stored Procedure.
    Ist richtig quick and dirty.
    Muss aber auch mal sein in diesen Zeiten der überbewerteten politischen Korrektheit. ;-)

    Einfach mal in einer Spieldatenbank ausführen:
    /* 2 Tabellen erstellen, die hoffentlich den Vorgaben entsprechen ;-)*/
    SETANSI_NULLSON
    GO
    SETQUOTED_IDENTIFIERON
    GO
    CREATETABLE [dbo].[tbl_titel](
    [ID] [int] IDENTITY(1,1)NOTNULL,
    [titel] [nvarchar](100)NOTNULL,
    CONSTRAINT [PK_tbl_titel] PRIMARYKEYCLUSTERED
    (
    [ID] ASC
    )WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY]
    )ON [PRIMARY]
    CREATETABLE [dbo].[tbl_main](
    [ID] [int] IDENTITY(1,1)NOTNULL,
    [ID_titel] [int] NOTNULL,
    CONSTRAINT [PK_tbl_main] PRIMARYKEYCLUSTERED
    (
    [ID] ASC
    )WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY]
    )ON [PRIMARY]
    GO
    ALTERTABLE [dbo].[tbl_main] WITHCHECKADDCONSTRAINT [FK_tbl_main_tbl_titel] FOREIGNKEY([ID_titel])
    REFERENCES [dbo].[tbl_titel] ([ID])
    GO
    ALTERTABLE [dbo].[tbl_main] CHECKCONSTRAINT [FK_tbl_main_tbl_titel]
    GO

    /* Eine Stored Procedure erstellen*/
    SETANSI_NULLSON
    GO
    SETQUOTED_IDENTIFIERON
    GO
    -- =============================================
    -- Author: JR
    -- Create date: 06.05.09
    -- Description: DB Forum
    -- =============================================
    CREATEPROCEDURE [dbo].[Titelupdate]
    -- Add the parameters for the stored procedure here
    @titel varchar(100)=''
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SETNOCOUNTON;
    -- Insert statements for procedure here
    if @titel in(select titel from tbl_titel)
    begin
    insertinto tbl_main (id_titel)
    select id from tbl_titel where titel like @titel
    end
    else
    begin
    insertinto tbl_titel (titel)values(@titel)
    insertinto tbl_main (id_titel)select id from tbl_titel where titel = @titel
    end
    END
    GO
    /* Die Stored Procedure 2 mal aufrufen, beim ersten mal wird der Titel angelegt,*/
    /* beim 2. Mal nur die ID in tbl_main eingetragen */
    DECLARE @return_value int
    EXEC
    @return_value = [dbo].[Titelupdate]
    @titel
    = N'Titel18'
    SELECT'Return Value'= @return_value
    GO
    DECLARE @return_value int
    EXEC
    @return_value = [dbo].[Titelupdate]
    @titel
    = N'Titel18'
    SELECT'Return Value'= @return_value
    GO

     
  5. Poleander

    Poleander Neuer Benutzer

    AW: Kniffliges SQL-statement...

    Hallo bieber, hallo Ritschi ja, in der Originaldatenbank sind bei weitem mehr Tabellen und in diesen weitere Spalten enthalten ;-) tabelle_main und tabelle_titel sind spieltabellen, die den Kern meiner Frage abbilden sollten. Bis zu Deiner Antwort, Ritschi, hatte ich es letztendlich mit zwei Statements "gelöst" - obwohl ich alles mit einem Aufruf über die Bühne bringen wollte -> Ausgang ist eine VB.NET App. 1. Statement nach dem Muster: IF NOT EXISTS (SELECT FROM ...) INSERT INTO -> wenn titel='bla' nicht existiert, erstelle Eintrag (id wird erzeugt) 2. Statement nach dem Muster: INSERT INTO SELECT FROM -> id des titel wird in tabelle_main geschrieben Doch Deinen Beitrag, Ritschi, finde ich genial und danke Dir sehr herzlich!! Freudestrahlend würde ich diesen Thread als *solved and closed* betrachten ;-)
     

Diese Seite empfehlen