Laden...

MS SQL - Gespeicherte Prozeduren

Erstellt von Kaur vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.107 Views
K
Kaur Themenstarter:in
1 Beiträge seit 2013
vor 10 Jahren
MS SQL - Gespeicherte Prozeduren

verwendetes Datenbanksystem: <SQL Management Studio>

hi folks,

ich arbeite derzeit mit Gespeicherte Prozeduren, bekomm aber folgende Fehlermeldung:> Fehlermeldung:

Meldung 116, Ebene 16, Status 1, Prozedur p_zeiten, Zeile 20
Nur ein einziger Ausdruck kann in der Auswahlliste angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird.

Hier meine Prozedur:


CREATE PROC p_zeiten
@SerieID int

AS
DECLARE @AnfangsUhrzeit int
DECLARE @EndUhrzeit int


IF  ((SELECT  AnfangsUhrzeit FROM wirdGesendet WHERE @AnfangsUhrzeit = AnfangsUhrzeit)  < 1000) AND ((SELECT  EndUhrzeit FROM wirdGesendet WHERE @EndUhrzeit = EndUhrzeit) < 1000)
BEGIN

SElect @AnfangsUhrzeit =( select top 6 Serie.Titel, convert (char(10),cast(cast(AnfangsDatum as char(8)) as datetime),103)AS'Datum' ,
	SUBSTRING(CONVERT(VARCHAR(50), AnfangsUhrzeit), 1, 1) + ':' + 
	SUBSTRING(CONVERT(VARCHAR(50), AnfangsUhrzeit), 2, 3) as 'Anfang',
	SUBSTRING(CONVERT(VARCHAR(50), EndUhrzeit), 1, 1) + ':' + 
	SUBSTRING(CONVERT(VARCHAR(50), EndUhrzeit), 2, 3) as 'Ende',	
	 SenderName as 'Sender' from wirdGesendet 
					left join Sender on(wirdGesendet.SenderID = Sender.SenderID) 
					left join Serie on (Serie.ID=wirdGesendet.SerieID) order by AnfangsDatum
					)FROm wirdGesendet Where @AnfangsUhrzeit = AnfangsUhrzeit		
END

ELSE IF ((SELECT  AnfangsUhrzeit FROM wirdGesendet WHERE @AnfangsUhrzeit = AnfangsUhrzeit) > 1000) AND ((SELECT  EndUhrzeit FROM wirdGesendet WHERE @EndUhrzeit = EndUhrzeit) > 1000)
BEGIN
Select @AnfangsUhrzeit = ( select top 6 Serie.Titel, convert (char(10),cast(cast(wirdGesendet.AnfangsDatum as char(8)) as datetime),103)AS'Datum' ,
	SUBSTRING(CONVERT(VARCHAR(50), AnfangsUhrzeit), 1, 2) + ':' + 
	SUBSTRING(CONVERT(VARCHAR(50), AnfangsUhrzeit), 3, 4) as 'Anfang', 	
	SUBSTRING(CONVERT(VARCHAR(50), EndUhrzeit), 1, 2) + ':' + 
	SUBSTRING(CONVERT(VARCHAR(50), EndUhrzeit), 3, 4) as 'Ende', SenderName as 'Sender' from wirdGesendet 
					left join Sender on(wirdGesendet.SenderID = Sender.SenderID) 
					left join Serie on (Serie.ID=wirdGesendet.SerieID) order by AnfangsDatum
					)FROm wirdGesendet Where @AnfangsUhrzeit = AnfangsUhrzeit
END
GO

hab schon vieles ausprobiert...aber leider kein erfolg :S

BITTE UM HILFE!

3.511 Beiträge seit 2005
vor 10 Jahren

Hallo,

das hat mit einer SP nichts zu tun, sondern mit der Abfrage an sich. Das Problem ist, dass du @AnfangsUhrzeit als INT deklarierst, und später willst du dieser Variablen ganze Zeilen vorwerfen (SELECT TOP 6 xxxx). Das funktioniert natürlich nicht, da erwartet wird dass du dieser Variablen nur ein INT vorwirfst. Deswegen auch "Nur ein einziger Ausdruck kann in der Auswahlliste angegeben werden".

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

t
156 Beiträge seit 2012
vor 10 Jahren

Hallo Kaur,

was mir bei deiner sp auffällt ist das ich nicht erkenne was du damit beabsichtigst.
Folgendes ist auffällig:

  • Du verwendest (zu der zeit leere) Variablen in einem where-Block.
    Warum? Oder willst Du das Ergebnis in @AnfungsUhrzeit / @EndUhrzeit speichern?
  • Du vesuchst in den variablen zu speichern, selekierst aber TOP 6.
    Das geht so nicht. In einer Variable kannst Du nur einen Wert speichern.

In dieser Form:
select @Variable = feld from tabelle where...

Viele grüße,
telfa