Case When Bedingung

IchHH

Datenbank-Guru
Beiträge
284
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?
 
Werbung:
GO ist kein SQL Befehl, kann also nicht innerhalb eines solchen verwendet werden.

Es wir nur von SSMS als "Abschluss" von mehreren Befehlen erkannt.
 
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
 
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.
 
Werbung:
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;
 
Zurück
Oben