mari884
Goto Top

Löschen von Datenbanktabellen die älter als n-Tage sind quittiert mit Fehler: Subquery returned more than 1 value

Hallo,

hier ist mein Skript.


DELETE [hMailDB].[dbo].[hm_messages] WHERE [hMailDB].[dbo].[hm_messages].[messagecreatetime]
IN
(SELECT [hMailDB].[dbo].[hm_messages].[messagecreatetime] FROM [hMailDB].[dbo].[hm_messages] WHERE [hMailDB].[dbo].[hm_messages].[messagecreatetime] <= DATEADD(WW, -2, GetDate()))


das wird vom SQL Studio mit dem Fehler quittiert.


Meldung 512, Ebene 16, Status 1, Prozedur MsgDeleteTrigger, Zeile 5
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.


Wie muss ich das Script umbauen, damit es passt ?

Vielen Dank für Eure Tipps.

MaRi

Content-Key: 276585

Url: https://administrator.de/contentid/276585

Printed on: May 4, 2024 at 07:05 o'clock

Member: MadMax
MadMax Jul 06, 2015 at 15:45:14 (UTC)
Goto Top
Hallo MaRi,

Dein Problem rührt nicht direkt von Deinem Befehl her sondern scheint wohl ein Fehler im Trigger zu sein (MsgDeleteTrigger, Zeile 5). Du löschst vermutlich mehrere Zeilen und berücksichtigst das im Trigger nicht.

Dein Befehl ist übrigens etwas umständlich. Das was in der Unterabfrage steht, läßt sich doch auch gleich als delete schreiben.

Gruß, Mad Max
Member: Mari884
Mari884 Jul 06, 2015 at 16:21:44 (UTC)
Goto Top
Hallo du,

Kannst mir den eventuell aus deiner Sicht mal umbauen?
Member: SeaStorm
SeaStorm Jul 06, 2015 updated at 18:37:55 (UTC)
Goto Top
DELETE from [hMailDB].[dbo].[hm_messages] WHERE [hMailDB].[dbo].[hm_messages].[messagecreatetime] <= DATEADD(WW, -2, GetDate())
Member: Mari884
Mari884 Jul 06, 2015 at 21:28:27 (UTC)
Goto Top
Selber Fehler, leider !

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
Member: MadMax
MadMax Jul 06, 2015 updated at 21:56:19 (UTC)
Goto Top
Hallo MaRi,

natürlich kommt derselbe Fehler. Was Die SeaStorm geschrieben hat, war ja nur die einfachere Version Deines Befehls. Um Dein Problem zu lösen müßtest Du mal den Trigger zeigen.

Nachtrag:
Es gibt doch eine Möglichkeit, ohne Deinen Trigger oder Deinen Primärschlüssel zu kennen, die Daten einzeln zu löschen. Das wird nicht die performanteste Art sein (weil die Daten einzeln gelöscht werden), aber es wird funktionieren:
select 1
while @@rowcount > 0
	delete top (1) FROM [hMailDB].[dbo].[hm_messages] WHERE [hMailDB].[dbo].[hm_messages].[messagecreatetime] <= DATEADD(WW, -2, GetDate())

Gruß, Mad Max