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

Case When Bedingung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von IchHH, 6 Dezember 2018.

  1. IchHH

    IchHH Datenbank-Guru

    Hallo, ich habe folgenden Code:

    Code:
    Select
    Case When (
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '02.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '03.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '04.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    0 End End End) = 1 then GO Else STOP End as test
    das Problem ist das "GO" und das "STOP". Das Go soll eigentlich nur bewirken das er mit den darunter liegenden Aufgaben fortfährt, das Stop soll hingegen sagen das die Abfrage ohne Fehler beendet werden soll.

    Wie aber setzt man das richtig um?
     
  2. castorp

    castorp Fleissiger Benutzer

    GO ist kein SQL Befehl, kann also nicht innerhalb eines solchen verwendet werden.

    Es wir nur von SSMS als "Abschluss" von mehreren Befehlen erkannt.
     
  3. IchHH

    IchHH Datenbank-Guru

    Und wie könnte dann eine Lösung aussehen?
     
  4. IchHH

    IchHH Datenbank-Guru

    Ich habe es nun mal mit dem IF Ansatz probiert. Code siehe unten. Bekomme nun aber immer wieder den Hinweise das die ES_92817 bereits vorhanden sei. Was mache ich nun falsch?

    Code:
    DECLARE    @kopf varchar(100)
    
    Set @kopf = (Select concat('Saldo vom ',Convert(nvarchar,DATEFROMPARTS(YEAR(CURRENT_TIMESTAMP), 1, 1),104)))
    
    If
    (Case When (
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '02.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '03.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '04.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else
    0 End End End) = 0 then 0 Else 1 End) = 1
    
    --if exists(select * from sysobjects where name='ES_92817')
    Drop Table dbo.ES_92817
    
    Create Table dbo.ES_92817 (Kontenart varchar(5), Saldo money)
    
    Insert into dbo.ES_92817 (Kontenart, Saldo)
    Select 400,0
     
  5. IchHH

    IchHH Datenbank-Guru

    Wenn ich das

    Code:
    if exists(select * from sysobjects where name='ES_92817')
    Drop Table dbo.ES_92817
    nach ganz oben setze meckert das System über den nicht existierende Objektname bei "Insert into" rum. Irgendwie ist der Wurm drinnen.
     
  6. ukulele

    ukulele Datenbank-Guru

    Du solltest (teilweise must du) mit BEGIN und END arbeiten. Außerdem erfordern einige Operationen ein abschließendes Semikolon. Beispiel:
    Code:
    IF EXISTS (select * from sysobjects where name='ES_92817')
    BEGIN
    DROP TABLE ES_92817;
    CREATE TABLE ES_92817(Kontenart varchar(5), Saldo money);
    END
    ELSE
    BEGIN
    PRINT 'toller Fehler!';
    END;
     
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