Kann den T-SQL nicht als Sicht speichern

master-sp

Benutzer
Beiträge
22
Hallo zusammen,
ich habe ein kleines Problem das ich nicht gelöst bekomme.

Ich möchte über eine einfache "select" Anfrage auf eine -> Sicht (in der MS Sql-Datenbank) zwei Werte erhalten.

Leider kann ich diesen Code nicht 👎 als Sicht speichern.

Code:
declare @zeit1 as datetime2(5)
declare @zeit2 as datetime2(5)
declare @zeit3 as datetime2(5)
Set @zeit1 = CONVERT(varchar(10), GETDATE(),102)+ ' 05:00:00.00000'
Set @zeit2 = CONVERT(varchar(10),GETDATE(), 104)+' 13:00:00.00000'
Set @zeit3 = CONVERT(varchar(10),GETDATE(), 104)+' 21:00:00.00000'

SELECT        (SELECT        COUNT(*)
                          FROM            dbo.Tabelle
                          WHERE        (TimeStamp BETWEEN @zeit1 AND @zeit2)) AS Schicht1,
                             (SELECT        COUNT(*)
                               FROM            dbo.Tabelle
                               WHERE        (TimeStamp BETWEEN @zeit2 AND @zeit3)) AS Schicht2

Ergebnis wenn ich den SQL im MSSMS ablaufen lasse :)

1675082591782.png

Meldung beim Versuch den Code als Sicht/View zu speichern :(

1675081457550.png

Hat jemand einen Tipp wie ich das hinbekomme??
 
Zuletzt bearbeitet:
Werbung:
Du kannst in einer Sicht keine Variablen deklarieren, das ist einfach was anderes als ein Script.

In deinem Fall würde ich einfach die Variablen durch eine explizite! Konvertierung des Strings ersetzen, also aus @zeit1 im Code wird:
CONVERT(DATETIME2,CONVERT(varchar(10), GETDATE(),102)+ ' 05:00:00.00000')

Es geht auch anders aber das scheint mir jetzt übertrieben für exakt eine Variable die zwei mal vor kommt.
 
Werbung:
Danke ... so klappt es !

Code:
SELECT        (SELECT        COUNT(*) AS Schicht1
                          FROM            dbo.Tabelle
                          WHERE        (TimeStamp BETWEEN CAST(CONVERT(varchar(10), GETDATE(), 102) + ' 05:00:00.00000' AS datetime2) AND CAST(CONVERT(varchar(10), GETDATE(), 104) + ' 13:00:00.00000' AS datetime2))) AS Schicht1,
                             (SELECT        COUNT(*) AS Schicht2
                               FROM            dbo.Tabelle
                               WHERE        (TimeStamp BETWEEN CAST(CONVERT(varchar(10), GETDATE(), 104) + ' 13:00:00.00000' AS datetime2) AND CAST(CONVERT(varchar(10), GETDATE(), 104) + ' 21:00:00.00000' AS datetime2))) AS Schicht2
 
Zurück
Oben